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

  1. Paste or type your input in the input area above.
  2. The tool processes your input automatically or click Run.
  3. Copy or download the result using the action buttons.
  4. Use Ctrl+Enter to run quickly from the keyboard.