JWT 解析
在线解析 JWT 令牌,解码 header 与 payload 并换算 exp、iat 等时间字段,显示剩余有效期与常用 claim 含义。只做解码不验签,全程在浏览器内完成。
Header
Payload
Claims
先看一句警告:只解码,不验签
JWT 的第三段是签名,验证它需要密钥和算法,本页两样都不碰 —— 它只把前两段 base64url 解开给你看。所以「能解出内容」完全不代表「这个令牌可信」。
判断令牌真伪必须在服务端用库做验签(同时校验 alg、iss、aud、exp)。本页的用途是排查问题:看看 claims 里到底写了什么,对不对得上预期。
三段各自是什么
格式是 header.payload.signature,中间用点号分隔,必须恰好三段,任一段为空都会报错。前两段是 base64url 编码的 JSON,第三段是签名原文(本页不做处理)。
解码按 base64url 规则来:把 - 换成 +、_ 换成 /,再补上被省略的 = 填充,最后按 UTF-8 还原 —— 所以中文 claim 值不会出现乱码。
时间字段怎么读
JWT 里的时间都是 Unix 秒(不是毫秒)。页面会识别 exp、iat、nbf、auth_time、updated_at 这些时间字段,换算成可读时间,并把 exp 与当前时刻比较,告诉你还有多久过期或已经过期多久。
换算结果按 UTC 输出,避免「本机时区一变结论就变」的歧义。没有 exp 的令牌会被标注为「语义上永不过期」—— 这在生产环境里通常是个设计缺陷。
看到 alg: none 请立刻警惕
alg 为 none 意味着这个令牌没有签名,任何人都能伪造。页面检测到这种情况会单独给出警告。
正常的令牌应该是 RS256、ES256、HS256 这类带签名的算法。如果生产环境的令牌里出现 none,说明验签环节存在严重问题,而不是「这个令牌比较简单」。
令牌内容不会离开你的浏览器
解码用 atob 加手写 base64url 处理完成,不联网、不拉 JWKS、不把 token 发给任何服务。排查线上问题时可以直接把有问题的令牌粘进来。
但令牌本身是凭证:粘贴前确认周围环境(屏幕共享、录屏)是安全的;排查完记得清理输入框和浏览器历史里留下的记录。
边界
不校验 iss、aud 是否匹配,不检查权限范围(scope),也不判断这个令牌是否被吊销 —— 吊销只能靠服务端的令牌黑名单或短有效期加刷新机制。
结果展示在两个只读文本框里,没有复制按钮,需要手动选中复制。要批量或自动化处理,请用后端的 jwt 库。
常见问题
解码成功说明令牌是有效的吗?
不能。验签需要密钥,本页不做。能解出内容只说明格式正确,真伪必须靠服务端用库验证。
exp 显示的时间和我的对不上?
页面按 UTC 输出,且 exp 是 Unix 秒。若你按本地时区或当成毫秒换算,就会差出好几个小时甚至几十年。
为什么提示必须恰好三段?
JWT 标准结构就是 header.payload.signature。少一段或多一段都不是合法 JWT,常见于复制时被截断或多了引号。
会拿我的令牌去验签或联网查询吗?
不会。全程本地解码,不请求任何接口,也不拉取 JWKS 公钥。