JWT Decoder
One input per line. Output is numbered to match the input order.
Pinned tools are listed in your favourites on the home page.Copies a link to this tool that carries your current input, so it opens ready to run.Gives you an iframe snippet for putting this tool on your own site.
Ctrl+Enter Run · Ctrl+Shift+C Copy · Esc Clear
Understand JWT Decoder
解码 JSON Web Token 的头部和载荷,让你读到它的声明、算法和过期时间。
How it works
JWT 是用点连接的三段 Base64URL:头部、载荷、签名。前两段是编码而非加密,这就是读取它们完全不需要密钥的原因——本工具对它们做 Base64URL 解码、解析 JSON,并把 exp 声明与当前时间比较以标记是否过期。签名段原样显示,从不与任何东西做校验,因此你粘贴的内容不会被发送到任何地方,也不需要任何密钥。
When to use it
- 从被 API 以 401 或 403 拒绝的 bearer 令牌中读出 sub、scope、aud 和 iss。
- 把已过期的令牌与仅仅缺少某个服务所需声明的令牌区分开。
- 在接入基于 JWKS 的验证之前,查看身份提供方使用了哪个 alg 和 kid。
- 确认登录流程签发的声明,正是你的授权规则实际读取的那些。
- 在排查权限问题时,检查从浏览器网络面板中抓到的令牌。
Watch out for
- 解码不是验证,解码出来的令牌也不是可信的令牌。任何人都能改写载荷、重新编码,得到一个在这里完美解码的东西。只有用签发者密钥校验签名,声明才值得据此行动。
- 绝不要让服务器信任令牌里的 alg 字段。根据头部来选择验证算法,正是 alg: none 攻击以及 RS256 降级为 HS256 的成因——后者中攻击者把公钥当作 HMAC 密钥来签名。请在验证代码中固定预期的算法和密钥。
- 载荷对每一个持有该令牌的人都是可读的,包括最终用户。签名保护声明不被篡改,却完全不能隐藏它。请把机密、内部 id 和个人数据挡在载荷之外。
- exp、iat 和 nbf 的单位是自纪元起的秒数,不是毫秒。把 JavaScript 的 Date.now() 值放进 exp,会让过期时间推到几万年之后,而每个符合规范的验证方都会接受它。
Not the right tool for: 判定一个请求是否已获授权。那需要在服务端用签发者密钥验证签名和声明;本工具是用于读取令牌内容的调试辅助。
Frequently Asked Questions
解码 JWT 等同于验证 JWT 吗?
不等同。解码只是读取 Base64URL 编码的内容。验证则是用密钥校验签名。任何 JWT 无需密钥都能解码,但在生产环境中你必须始终验证。
JWT 的载荷里有什么?
常见的载荷声明包括 sub(主体/用户 ID)、iat(签发时间)、exp(过期时间)、aud(受众)和 iss(签发者)。自定义声明可以是任意内容。
exp 声明是什么意思?
exp 声明是一个 Unix 时间戳,表示令牌何时过期。本工具会根据 exp 显示令牌当前是有效还是已过期。
How to Use JWT Decoder
- Paste or type your input in the input area above.
- The tool processes your input automatically or click Run.
- Copy or download the result using the action buttons.
- Use Ctrl+Enter to run quickly from the keyboard.