← 全部工具

数据不出浏览器

JWT Decoder — 在线解码

免费 JWT decoder。粘贴 token,查看 Base64URL 解码后的 header 与 payload。不会验证签名。

Header
{
  "alg": "HS256",
  "typ": "JWT"
}
Payload
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
Signature
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

仅用于调试。切勿把密钥粘贴到不可信网站。

在不信任的前提下读 JWT

JWT 是由点号分隔的三段 Base64URL:描述算法的 header、承载声明(claim)的 payload、以及签名。前两段的解码完全不需要密钥,这也正是绝对不要把机密信息放进 payload 的原因。任何截获 token 的人都能读到声明;签名只能证明签发者是谁。

调试时真正该看的不是「能不能解析」,而是「声明是否仍然有效」。exp 已过期就意味着 token 失效,无论接口怎么回。aud 或 iss 不匹配,往往能解释客户端上看起来莫名其妙的拒绝;对比两个时间戳,通常比加日志更快。

既然解码如此简单,就把 JWT 当作「已签名的文档」,而不是「上锁的盒子」。本工具完全在浏览器里运行,不会上传任何内容,但这个习惯要贯彻到所有场合:不要把生产 token 粘到任何你无法控制的网站上,并尽量使用短有效期加刷新,而不是长期 token。

常见问题

JWT 是什么?
JSON Web Token,常用于 API 身份声明。
会验证签名吗?
不会。本工具只解码,便于检查 claims。
数据会上传吗?
不会。解码在本地浏览器完成。
为什么别人能读到我的 JWT?
因为 payload 只是 Base64URL 编码,没有加密。签名保证的是完整性和来源,不是机密性。必须保密的内容应放进加密的 token 格式,更好的做法是服务端存储,用不透明的会话 ID 引用。
exp 声明是什么意思,设多久合适?
exp 是过期时间,用 Unix 时间戳(秒)表示,一旦超过,合规的服务端必须拒绝该 token。几分钟到一小时的短有效期能限制 token 被盗后的影响;再配一个刷新 token,那个才是需要长期保护和轮换的部分。
这个工具能验证签名吗?
不能,而且是刻意不做的。验证需要签名密钥或公钥,浏览器工具无法保管密钥。签名验证应在服务端完成,密钥不出你的基础设施;本页只用于读取声明。

相关工具