JWT 在线解析 / 解码 / 签名校验
粘贴 JSON Web Token,即可拆分 Header / Payload / Signature 三段并解码为可读 JSON,
自动换算 exp / iat / nbf 时间并标记过期状态,支持 HMAC 密钥验签。
所有处理均在浏览器本地完成。
输入 JWT
等待输入xxxxx.yyyyy.zzzzz 的三段 base64url 字符串,通常来自 Authorization: Bearer 请求头。Header(头部)
Payload(载荷)
Signature(签名段)
签名校验(HS256 / HS384 / HS512)
JWT 的三段结构:能读,不等于能信
JWT(JSON Web Token)是一个把 JSON 数据放进 URL 安全字符串的开放标准(RFC 7519),
最常见的用途是登录后的会话凭证:服务端签发一个 Token,之后每个请求都带着它,服务端无需查库就能确认「这是谁、有什么权限」。
它的结构极其简单——三个用 . 连接的base64url 段:
Header 声明签名算法(alg,如 HS256)和类型(typ);
Payload 是声明(claims)的集合;
Signature 是用密钥对前两段算出的签名。
base64url 与 Base64 的差异只有两处:用 - 和 _ 替换 + 和 /,
并省略末尾的 = 填充——这样 Token 可以直接放进 URL 而不会被转义规则破坏。
它是编码而不是加密,所以本工具不做任何密钥就能把 Header 和 Payload 还原成 JSON。
这也引出最重要的一条安全常识:Payload 是公开可读的。
任何拿到 Token 的人(浏览器插件、日志、代理服务器、共享链接)都能看到里面的全部内容,
密码、手机号、身份证号这类敏感信息绝对不能放进去。
签名解决的是「防篡改」而不是「防偷看」:签发方用密钥对 Header + Payload 计算 HMAC, 校验方用同一密钥重算并比对。改动任何一个字符都会导致签名对不上。 本工具的验签功能用 WebCrypto 在本地完成这一过程,密钥不会离开你的设备。 HS256 / HS384 / HS512 是对称算法(一个密钥同时负责签与验); RS256 等是非对称算法(私钥签发、公钥验证),适合第三方接入场景,本站只提供解析。
Payload 里有一组标准化的时间声明值得单独说明:
exp(expiration time)是过期时刻,iat(issued at)是签发时刻,
nbf(not before)是生效时刻,单位都是Unix 秒。
调试时最容易犯的错是把 exp 当成毫秒时间戳,换算出的日期差了整整一千倍——
本工具自动识别秒 / 毫秒,并同时给出本地时间与 UTC,过期直接标红、十分钟内即将过期标黄。
此外 iss(签发者)、aud(受众)、sub(主体)用于多系统间的边界校验,
正规实现在验签之外还必须检查这几个字段,否则会犯经典的「A 系统的合法 Token 被拿到 B 系统使用」错误。
还有一个历史悠久的攻击面值得每个开发者知道:none 算法降级攻击。
早年一些库允许 Header 里写 "alg": "none" 并跳过验签,攻击者便把签名段换成 none、
任意伪造 Payload。如今主流库已默认拒绝,但审查自建服务时仍要确认代码里存在算法白名单——
只接受预期的那一个 alg,而不是读 Token 里说什么就算什么。
解析全程在浏览器本地完成,你的 Token 不会经过任何服务器。
JWT 使用小贴士
- JWT 的 Payload 只是 base64url 编码,公开可读,不要放密码、手机号等敏感信息。
exp通常以「秒」为单位,看到 10 位数字就是秒、13 位就是毫秒,本站自动识别。- 验签通过只说明「未被篡改」,还需校验
iss/aud是否属于你的系统。 - 服务端必须固定期望算法,拒绝
alg: none,防止签名校验被绕过。 - Token 出现在 URL 里会被日志与浏览器历史记录,高敏场景优先使用 HttpOnly Cookie。