piapia123
zh

JWT 解析(不做签名验证)

编码加密

所有处理都在浏览器本地完成,数据不上传服务器

输入
输出

把 JWT 拆成 header、payload、signature 三段分别格式化,并把 iat / nbf / exp 这几个时间声明换算成可读时间、标出是否已过期。这里必须说清楚一件事:本工具只解析,不验证签名。 header 与 payload 不过是 Base64URL 编码的 JSON,任何人改掉里面的字段(比如把 role 改成 admin)而签名段不动,这里照样会显示「解析成功」。解析成功只代表它格式合法,不代表它可信 —— 要判断可信,必须用密钥或公钥重新算一遍签名,而那需要本工具没有、也不该有的密钥。输出里的 signatureVerification: not-performed 就是这句话的机器可读版本。

功能

  • 拆出并格式化显示 header、payload、signature 三段
  • iat / nbf / exp 换算成 ISO 可读时间,并给出是否已过期
  • 容忍缺 padding 的 Base64URL,也认 Authorization 头里的 Bearer 前缀与折行
  • 输出是一份 JSON,字段可以直接复制到别处使用
  • 段数不对时说明差在哪 —— 5 段会指出那是加密的 JWE 令牌而不是 JWT
  • 不做签名验证,并在输出里明确标注(多数「在线解析」工具不会告诉你这一点)

使用方法

  1. 把令牌粘贴进输入框(带不带 Bearer 前缀都可以)
  2. 结果立刻出现,不需要点按钮
  3. 查看三段内容与时间信息,确认 exp 是否已过期
  4. 点「复制」取走结果 —— 但不要把它当成「令牌有效」的证明

常见问题

解析成功了,是不是说明这个 token 有效?
不是。本工具不验证签名,也就无从判断令牌有没有被篡改、是不是可信的一方签发的。任何人都能造一个语法合法、内容随便写的 JWT,这里同样会解析成功。判断有效性必须在服务端用密钥(HS256)或公钥(RS256)验签 —— 前端的公钥只能验非对称签名,HS256 的密钥绝不能放进浏览器。
payload 是加密的吗?
不是。Base64URL 只是编码,不是加密,任何人拿到令牌都能读出里面的内容(本工具做的就是这件事)。所以令牌里不要放密码、手机号、身份证号这类信息。需要保密请改用 JWE(加密令牌),那种令牌是 5 段,本工具解析不了。
为什么结果里写着 signatureVerification: not-performed?
因为验证签名需要密钥,而密钥不该出现在浏览器里。工具能做的是如实说明它没验,而不是让你误以为「解析出来了 = 验过了」。这一条不会因为你换了令牌而变成 performed。
过期时间是按谁的时钟算的?
按你本机的时钟。exp 与当前时间比较得出是否过期,所以本机时间不准,判断也会不准。真正的过期判断永远应该由服务端来做 —— 客户端时间可以随便改。
为什么我的令牌解不开?
最常见的是粘贴时少了字符(令牌很长,容易断在中间)。其次是拿到了 5 段的 JWE 加密令牌 —— 那是加密过的,不是 JWT。另外 JWT 用的是 Base64URL(用 - 和 _ 代替 + 和 /,且不带 = 填充),这一点本工具已经按规范处理了。

相关工具