什么是 JSON Web Token?
JSON Web Token(JWT)是一种紧凑、URL 安全的信封,用于承载一小段声明(claims)负载。它是无状态 Web 会话、OAuth/OIDC ID Token、机器对机器 API 鉴权以及带签名的魔法链接的标准凭证格式。一个 JWT 始终是三段以点连接的 base64url 字符串:header.payload.signature。header 和 payload 都是 JSON;signature 是对前两段进行 MAC 或数字签名后的二进制结果。
JWT 是如何工作的?
当本工具解码一个令牌时,它沿着所有 JWT 库都遵循的同一条三步路径:
- 在点处将令牌拆分为恰好三个非空段。其他形态都视为格式错误。
- 对第 0 段和第 1 段进行 base64url 解码,然后对每段执行
JSON.parse。Header 携带算法(alg)和令牌类型(typ)。Payload 携带声明(sub、exp、iat、自定义键等)。 - 如果提供了密钥,则使用 header 中指定的算法对
<segment0>.<segment1>重新计算 MAC,并将其字节与第三段进行比较。 - 在解码后的声明旁展示验证结果,包括根据
exp声明计算出的可读过期时间提示。
为什么在浏览器中解码 JWT?
将正在使用的真实 JWT 粘贴到远程调试器,会把该凭证泄露到该服务的日志、可观测性栈以及该服务向其分发数据的任何合作伙伴中。即便第三方网站声称不会记录令牌,您也无法验证。本工具的构建初衷正是让您无需做出这种妥协:
- 零网络:运行时不存在
fetch、XMLHttpRequest或sendBeacon调用。在解码与验证时打开 DevTools——网络面板会保持静默。 - 原生 Web Crypto:HMAC 验证使用
crypto.subtle.importKey和crypto.subtle.sign,与您的运行时会调用的原语完全相同。 - 静态部署:每个页面都是单一的静态 HTML 文件,没有可被攻陷的服务器端点。没有服务器,也就没有可泄露的令牌。
此工具验证什么,不验证什么?
本工具的 v1 版本只验证 HMAC-SHA 系列签名。具体而言:
- 已支持:HS256、HS384、HS512。提供共享密钥后,本工具会重新计算并比较 MAC。
- 尚未支持:RS256/384/512(RSA)、ES256/384/512(ECDSA)、EdDSA 以及 PS256/384/512(RSA-PSS)。这些算法需要 PEM 或 JWK 形式的公钥,已被有意推迟到后续版本。
- 拒绝:
alg: "none"。本工具会解码该令牌,但会显式标记其为不安全——没有任何签名验证发生,任何接受此类令牌的生产系统都存在严重漏洞。
JWT 解码示例是什么样的?
将 RFC 7519 中的标准示例令牌粘贴到上方的输入框中:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Header 解码为 {"alg":"HS256","typ":"JWT"},payload 解码为 {"sub":"1234567890","name":"John Doe","iat":1516239022}。在验证面板中输入 your-256-bit-secret,签名校验返回有效。修改密钥中的任何一个字符,结果就会变为无效。所有这些过程都不会离开您的浏览器。
这正是我们在生产环境调试令牌时所希望存在的 JWT 解码器:尊重隐私、速度快,并构建在与运行时相同的原语之上。