免费 JWT 解码器

解码并查看 JSON Web Token · header、payload、claims 和过期时间。

Header


      

Payload


      

Signature


      

关于 JWT

JSON Web Token (JWT) 是一种用于在两方之间紧凑表达声明的方式。它由三部分组成:header(算法和类型)、payload(如签发者、过期时间、subject 等声明)和 signature。本工具仅解码 header 和 payload,不验证签名 · 验证签名需要签名密钥或公钥。所有解码都在您的浏览器中进行;您的令牌不会被发送到任何地方。

JSON Web Token 简史

JSON Web Token(JWT)于 2015 年 5 月Michael B. Jones(微软)John Bradley(Ping Identity)Nat Sakimura(NRI)在 IETF 的 JOSE 工作组下标准化为 RFC 7519。这是半个十年工作的顶点:第一份 JWT 互联网草案出现于 2010 年 12 月,源于 SAML 2.0(2005)笨重的基于 XML 的断言格式,以及对浏览器可以原生解析的更轻量替代品的强烈需求。突破在于选择 JSON 而非 XML,base64url 而非 PEM:一个 JWT 可以放入 URL 查询字符串或 Authorization: Bearer 头部。整个 JOSE 系列作为协调的一组发布:RFC 7515(JWS)用于签名,RFC 7516(JWE)用于加密,RFC 7517(JWK)用于密钥格式,RFC 7518(JWA)用于算法标识符,以及 RFC 7519(JWT)用于声明层,全部于 2015 年 5 月同一天发布。采用是即时的。OAuth 2.0(RFC 6749,2012)已标准化访问令牌但保留其格式不透明;行业选择了 JWT。OpenID Connect(2014 年 12 月,OpenID 基金会)使 JWT 对 ID 令牌成为强制要求。到 2017 年,所有主要身份提供商(Auth0OktaAzure ADAWS CognitoGoogle IdentityFirebase Auth)都将 JWT 作为其原生会话格式发出。JWT.io,Auth0 于 2014 年推出的解码器网站,成为事实上的 JWT 调试工具,并帮助巩固了该格式在开发者心中的份额。两起安全事件塑造了现代威胁模型:Tim McLean 2015 年披露alg: none 绕过和 HS/RS 算法混淆攻击,以及 CVE-2022-21449(2022 年 4 月),Neil Madden 在 Java 15-18 ECDSA 验证器中的「Psychic Signatures」漏洞。两者都导致库默认加固:大多数现代库现在直接拒绝 alg: none 并固定预期算法,而不是从令牌头部读取。

JWT 的结构剖析

JWT 在实践中的使用场景

标准与安全里程碑

更多常见问题

为什么这个工具不验证签名?

验证需要密钥(HMAC)或公钥(RSA / ECDSA / EdDSA)。将生产 HMAC 密钥粘贴到任何网站本身就是一次凭证泄漏,即使是一个发誓不传输任何东西的工具。验证属于你控制的服务器。解码器的工作是使内容可读,以便你看到验证器应该检查什么。

在这里粘贴真实的生产令牌安全吗?

解码完全在你的浏览器中进行。令牌不会通过网络发送,不会写入任何日志,也不会存储在任何地方。话虽如此,JWT 通常一种凭证:任何持有未过期访问令牌的人都可以作为用户行事。社区惯例是「像对待会话 cookie 一样对待生产 JWT」:尽可能使用测试令牌,并轮换你在签发它的浏览器会话之外共享过的任何真实令牌。

我应该在浏览器中将 JWT 存储在哪里?

两种常见模式各有权衡。localStorage 方便但可被页面上任何成功的 XSS 攻击读取。带有 HttpOnly 的 Cookie 对 JavaScript 不可见,因此 XSS 无法读取它们,但需要 SameSite=StrictSameSite=Lax 来避免 CSRF。当前的最佳实践:将短期访问令牌放在 JavaScript 变量中(仅内存),加上一个长期刷新令牌放在限定到刷新端点的 HttpOnly + Secure + SameSite=Strict cookie 中,每次使用都轮换。

头部中的 kid 字段做什么?

它标识签名令牌的密钥。现代身份提供商在 /.well-known/jwks.json 端点发布其公钥作为 JWK Set(RFC 7517);验证者查找其 kid 与令牌头部匹配的密钥。这就是零停机密钥轮换成为可能的原因:在宽限期内,旧密钥和新密钥都可以位于 JWKS 中。

我可以在 JWT 签发后撤销它吗?

本质上不能。签名的 JWT 在其 exp 声明之前都有效;这种无状态性是该格式的标志性属性。变通方法:保持访问令牌短(5-15 分钟)并配以可撤销的刷新令牌;维护服务器端已撤销 jti 值的拒绝列表;轮换签名密钥(这会使每个用它签名的未完成令牌失效)。每个选项都重新引入了一些状态;那就是权衡。

解码令牌与解密令牌是一回事吗?

不是。解码将 base64url 反转回 JSON:任何人都可以做,这就是重点。解密需要密钥,仅适用于 JSON Web Encryption(JWE,RFC 7516),即 JOSE 系列的加密变体。你在野外看到的大多数令牌是 JWS(已签名但未加密),所以解码足以读取它们。

相关工具