跳到正文

JWT 解码与验证

解码 JSON Web Token 的头部和声明,检查是否过期并验证签名;令牌不会离开你的浏览器。

在此标签页中解码和验证,令牌和密钥不会发送到任何地方。

粘贴令牌后,这里会显示头部、声明和有效期。
在浏览器中运行 · 无需上传工作原理

JWT 解码器 使用方法

  1. 1

    粘贴令牌

    粘贴来自 Authorization 请求头、Cookie 或应用存储中的 JWT;开头的“Bearer ”会被自动忽略。

  2. 2

    查看声明

    查看头部和载荷表格、易读的 exp、iat 和 nbf 时间,以及过期提示条。

  3. 3

    添加密钥

    输入 HMAC 密钥,或粘贴 PEM、证书、JWK、JWKS 格式的公钥。

  4. 4

    验证签名

    点击“验证签名”,确认令牌是用该密钥签发的,且内容未被改动。

限制与 Pro

免费使用,无需注册,令牌数量不限;验证支持 13 种算法(256、384、512 位的 HS、RS、PS 和 ES,以及 EdDSA)。

Pro 可去除广告;解码和验证功能在所有套餐中完全相同。 了解 Pro

关于 JWT 解码器

JSON Web Token(JWT)由三段用点号连接的 Base64URL 字符串组成:标明签名算法的头部、包含各项声明的载荷,以及签名。粘贴一个令牌(带不带“Bearer ”前缀都行),解码器会把头部和载荷显示为易读的表格或格式化的 JSON,用不同颜色标出令牌的三个部分,并解释 iss、sub、aud、kid、scope 等标准字段。

时间类声明会自动转换:exp、iat、nbf 和 auth_time 会显示为你所在时区的日期、UTC 时间和相对时间(如“2 小时后过期”“3 天前已过期”)。页面上的提示条会直接告诉你令牌是已过期、尚未生效还是没有过期时间,并在 exp 看起来是毫秒而不是秒时给出警告。

解码本身无法证明令牌由谁签发,所以验证器会用浏览器内置的 WebCrypto 检查签名。HS256、HS384 和 HS512 需要共享密钥(纯文本或 Base64)。256、384、512 位的 RS、PS、ES 算法,以及使用 Ed25519 的 EdDSA,需要公钥,可以粘贴 PEM 公钥、RSA PUBLIC KEY 块、X.509 证书、单个 JWK 或完整的 JWKS,其中的密钥会按令牌的 kid 选取。

本工具无法解密 JWE 令牌(五段式),也不会获取 JWKS 链接;请自行打开签发方的 jwks_uri,并粘贴其中的 JSON。

隐私

令牌相当于持有者凭证,本页也按这个标准处理:解码和签名验证都通过 WebCrypto 在浏览器中完成,令牌、密钥和公钥不会发送到服务器,也不会被记录或保存。关闭或刷新标签页后,所有内容都会清除。

功能

易读的时间

exp、iat 和 nbf 以你所在时区、UTC 以及“2 小时后”“3 天前”的形式显示。

真实的签名验证

使用 WebCrypto,根据你的密钥或 JWKS 验证 HMAC、RSA、RSA-PSS、ECDSA 和 Ed25519 签名。

令牌留在本地

不会上传任何内容,可以放心检查生产环境的令牌。

JWT 解码器:常见问题

在这里粘贴生产环境的令牌安全吗?
令牌由你标签页中运行的 JavaScript 解码和验证,不会发出包含它的请求,你可以在浏览器的网络面板中确认。不过有效令牌在过期前就像密码一样好用,所以不要把正在使用的令牌粘贴到不信任的网站;分享截图时,最好使用已过期或测试用的令牌。
为什么只解码并不能证明令牌可信?
任何人都可以自己编写头部和载荷并做 Base64URL 编码,解码只是把这个过程反过来。只有签名才能把令牌和签发方绑定。信任任何声明之前,请先用签发方的公钥或共享密钥验证,并确认 alg 是服务器预期的算法,因为接受“none”或被替换的算法是典型的安全漏洞。
验证 RS256 或 ES256 令牌的公钥去哪里找?
身份提供方通常会以 JWK Set 的形式公开密钥。先查看签发方的 /.well-known/openid-configuration,打开其中列出的 jwks_uri,把得到的 JSON 粘贴到这里,工具会选用 kid 与令牌头部一致的密钥。你也可以直接粘贴 PEM 公钥或签发方的 X.509 证书。
exp、iat 和 nbf 分别是什么意思?
它们是 NumericDate 类型的声明,以 UTC 1970 年 1 月 1 日起经过的秒数表示。exp 是令牌失效的时间,iat 是签发时间,nbf 是最早可被接受的时间。服务器通常允许一两分钟的时钟偏差。解码器会把每一项显示为本地日期、UTC 时间戳和相对时间。
HMAC 密钥没错,为什么验证还是失败?
常见原因有:复制密钥时带上了空白字符;签发令牌时密钥是经过 Base64 编码的;或者令牌被某个工具重新编码,改变了头部或载荷的字节。可以试试打开“密钥经过 Base64 编码”开关。前两段中任何改动,哪怕只是 JSON 键的顺序变了,都会让签名失效。