JWT 解码器
粘贴一个 JSON Web Token,即可读取其 header 和 payload、查看过期时间,并理解每一个声明(claim)。你的 Token 永远不会离开浏览器。
在浏览器中运行无需注册不上传任何数据
解码不等于验证。任何人都能读取 JWT 的 header 和 payload,因为它们只是经过 base64url 编码。本工具显示的是 Token 声称的内容,并不能证明 Token 是真实的。请务必在你的服务器上验证签名。
Header
Payload
声明说明
验证签名(可选,HS256/HS384/HS512)
使用浏览器的 Web Crypto API,用你输入的密钥校验 HMAC 签名。密钥永远不会离开此页面。RSA/ECDSA Token 需要签发者的公钥,此处不做验证。
如何使用JWT 解码器
- 把 Token 粘贴到编码的 Token输入框中。来自 Authorization 请求头的前缀
Bearer会被自动忽略。 - header 和 payload 会被立即解码,并以格式化后的 JSON 显示。
- 查看声明说明表格:
exp、iat和nbf会被转换为日期,并显示“多久后过期”/“已过期多久”。 - 检查状态栏中的过期问题,以及针对
alg: none等危险设置的警告。 - 还可以输入共享密钥,在本地校验 HS256、HS384 或 HS512 签名。
JWT 里面有什么?
JSON Web Token(RFC 7519)由三个用点号连接的 base64url 字符串组成:header.payload.signature。header 指明签名算法(alg)和 Token 类型。payload 包含声明,例如用户是谁、Token 何时过期。signature 则是用密钥或私钥对前两部分计算得出的签名。
解码不等于验证
header 和 payload 只是经过编码,并没有加密,所以任何持有 Token 的人都能读取它们。这就是为什么绝不应该把密码或机密信息放进 JWT payload。解码告诉你 Token 声称了什么;而验证签名(通常在你的 API 服务器上用 jose 或 PyJWT 等库完成)才能证明是谁签发的,以及它没有被篡改。服务器还必须检查 exp、nbf、iss 和 aud,并拒绝不符合预期的算法。
注册声明速查表
| 声明 | 含义 |
|---|---|
iss | 签发者:创建并签名该 Token 的一方 |
sub | 主题:通常是用户 ID |
aud | 受众:该 Token 面向哪个 API |
exp | 过期时间,以自 Unix 纪元起的秒数表示 |
nbf | 在此时间之前无效 |
iat | 签发时间 |
jti | 唯一的 Token ID,可用于吊销列表 |
调试“token expired”错误
如果 API 拒绝了一个看起来还很新的 Token,请将 exp 和 nbf 与服务器时钟进行比较。机器之间存在少量时钟偏差很常见,因此大多数库允许 30–60 秒的容差。还要确认 exp 的单位是秒:误用毫秒值是一个常见 bug,会让过期时间落在数千年之后。
常见问题
在这里粘贴生产环境的 JWT 安全吗?
这个工具会验证 JWT 签名吗?
为什么我的 Token 显示已过期?
exp 声明的时间已经过去。请申请新的 Token,或用 refresh token 刷新它。如果时间看起来不对,请检查是否存在时钟偏差,或者 exp 值是否以毫秒写入。JWT、JWS 和 JWE 有什么区别?
为什么 alg 为“none”很危险?
alg: none,并且只应接受其预期的特定算法。