JWT 在线解析与签名验证生成 打开工具

JWT 生成:自己签一个测试 Token

联调时经常需要一个「指定用户、指定过期时间」的 Token,但登录接口不一定给得出来。自己签一个是最快的办法:把 Header 与 Payload 写成 JSON,填入密钥,算出签名拼成三段。

签名的计算过程

signingInput = base64url(header) + "." + base64url(payload)
    signature    = base64url( SIGN(signingInput, key) )
    token        = signingInput + "." + signature

注意签名算的是编码后的字符串,不是原始 JSON。所以 JSON 里多一个空格、键的顺序不同,都会算出完全不同的签名——这是「同一个 Payload 两次签名结果不同」的正常原因。

签名算法由 Header 里的 alg 决定,必须与实际使用的密钥类型匹配。HS 用字符串密钥,RS/PS/ES 用私钥。

造一个测试 Token 该填什么

最小可用 Payload:

{
      "sub": "10001",
      "role": "admin",
      "iat": 1762300000,
      "exp": 1762303600
    }

sub 填用户 ID、role 填要测的角色、iat 填当前时间、exp 填一小时后。需要测「过期」分支时把 exp 设成过去的时间即可。

时间用秒,别用毫秒。需要当前时间戳可以在同门的时间戳工具里取。

密钥从哪来

HS 系列:与你的服务端配置的 JWT_SECRET 完全一致。差一个字符就验不过,注意首尾空格与换行。

RS/PS/ES 系列:用服务端的私钥,或者自己生成一对密钥并让服务端临时信任(这需要改服务端配置,只适合本地环境)。

生成测试密钥对:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem
    openssl pkey -in private.pem -pubout -out public.pem

得到的 private.pem 是 PKCS#8,public.pem 是 SPKI,正好对应工具要求的两种格式。

安全边界

签名与校验全部调用浏览器内置的 Web Crypto,不引入第三方库、不依赖 CDN,页面没有任何接口。Token 与密钥不上传、不写 localStorage、不进 URL、不进日志,刷新即消失。

但仍然建议:生产密钥不要贴进任何网页工具,包括这个。测试 Token 用测试密钥,生产 Token 用登录流程拿。工具再安全,也挡不住浏览器插件、系统输入法、录屏这些外围。

上面这些都不用装软件,也不用注册:打开页面就能用。

打开 JWT 在线解析与签名验证生成 →

常见问题

生成的 Token 为什么服务端验不过?

九成是密钥不一致(多空格、换行、复制时截断)或算法不匹配。其次检查 Payload 里的 exp 是否已过期、iss/aud 是否符合服务端期望。

能用它生成 JWE(加密 JWT)吗?

不能。这个工具只做 JWS(签名),不做 JWE(加密)。JWE 是五段结构,需要另一套实现。

签名能自定义吗?

不能。签名必须按规范计算,任何偏差都会导致验证失败。可自定义的只有 Header 与 Payload 的内容。