返回

JWT 解析

工具介绍

JWT 是三段用点号连起来的文本:头、载荷、签名。这个页面只把前两段从 Base64URL 解出来,方便查看声明了什么。它不持有密钥,也不能告诉你这段令牌是谁签发的。

Base64URL 要把 - 换回 +、_ 换回 /,并补上 = 再解码,然后 JSON.parse。段数不是 3 时提示格式错误。若载荷里有 exp 或 iat,页面把秒数乘 1000,用浏览器本地时区显示,并比较 exp 是否早于当前时间。签名那一段只原样展示,不参与任何运算。

计算示例

  1. 输入:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTQyIiwibmFtZSI6IuW8oOS4iSIsImlhdCI6MTcwNDA2NzIwMCwiZXhwIjoxNzA0MTUzNjAwfQ.sig

    输出:头是 alg=HS256、typ=JWT;载荷 sub=user-42,name=张三,iat=1704067200,exp=1704153600

  2. 输入:只有两段的 a.b

    输出:JWT 格式错误:需要三段以 . 分隔

  3. 输入:把上例的最后一段 sig 换成别的文字,前两段不变

    输出:头和载荷仍然解得出来。页面不会因此报签名错误

使用限制

  • 解出来的 JSON 不能当成已经通过鉴权。任何人都能编一段格式正确但签名是假的令牌。
  • exp、iat 的文字格式随浏览器语言变化,不要复制这行文字去和服务器日志逐字比对。
  • 头或载荷不是合法 JSON 时,解析失败并带上引擎的错误信息。

常见错误

  • 把整段令牌当密码一样放进截图。载荷通常含用户编号,而且是明文编码,不是加密。
  • 看到 alg 是 HS256 就认为页面已经用密钥验过。没有这一步。
  • 时间对不上时先怀疑页面。先确认你看的是本地时区,而时间戳本身是 UTC 秒。

常见问题

1704067200 是哪一天?▾
UTC 2024-01-01 00:00:00。东八区显示为 2024-01-01 08:00:00。exp 1704153600 是整整一天之后。
为什么签名看起来很短?▾
示例最后一段就是字符 sig,用来说明页面不检查它。真实 HS256 签名是一长串 Base64URL。
能用它签发新令牌吗?▾
不能。页面没有编码和签名功能。