JWT(JSON Web Token)是 IETF 在 RFC 7519 中定义的开放标准(RFC 7515 描述其 JWS 簽章形式,RFC 7516 描述 JWE 加密形式,RFC 7517 定义 JWK 金鑰),用于在 HTTP 请求、OIDC 流程、微服务调用之间安全传递「已声明」的使用者信息。一个标准 JWT 字符串由三段 Base64URL 编码组成:Header(演算法与类型)、Payload(Claims,承载使用者数据)、Signature(用金鑰对前两段的簽章)。三段之间用英文点号 `.` 分隔,例如 `eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c`。
**JWT ≠ 加密**。这是最常见的误解。Payload 默认是「明文可读」的——任何人都可以用 Base64URL 解碼看到内容。JWT 提供的是「**防篡改**」而不是「**防窃听**」:服务端用金鑰对 Header.Payload 重新簽章并与原 Signature 对比,若一致则证明 Token 在传输中没被改过。这正是火车票「二维码可读 + 防伪钢印」的隐喻:检票员关心的是「票是不是真的」,而不是「二维码看不清」。
JWT 在 13 种演算法之间做了明确分工。**HMAC 类**(HS256/HS384/HS512)用对称金鑰签发和验证,速度快、实现简单,适合单机服务或同一信任域内的服务集群;金鑰长度必须 ≥ 摘要长度(如 HS256 至少 32 字节)。**RSA 类**(RS256/RS384/RS512)用 RSASSA-PKCS1-v1_5,是最常见的非对称方案,签发方持私钥、验证方持公钥。**RSA-PSS 类**(PS256/PS384/PS512)用更新的 RSA-PSS 填充,安全性更高,AWS SigV4 与新晋 OIDC IdP 倾向使用。**ECDSA 类**(ES256/ES384/ES512)用椭圆曲线(分别为 P-256/P-384/P-521),簽章更短、性能更好。**EdDSA**(主要为 Ed25519)簽章速度极快、确定性簽章(同一消息同一金鑰必出同一簽章),是 OAuth 2.1 与新协议的推荐演算法。
安全是 JWT 在生产环境最容易踩雷的地方。OWASP 在 JWT Cheat Sheet 中强调至少 4 条红线:(1) 永远不要在 Payload 里放密码、身份证、银行卡、API Key 等明文敏感信息;(2) 服务端**不要相信** Token Header 中声明的 `alg`,必须用配置写死的演算法校验,否则攻击者改 `alg: none` 就能绕过(这是历史上 CVE-2015-9235 等漏洞的根因);(3) HMAC 金鑰不能用短字符串,至少 32 字节随机数;(4) 验证不能只看簽章,还要校验 `exp`(过期时间)、`nbf`(生效时间)、`iss`(签发者)、`aud`(受众)。本工具在 UI 上把这些 Claims 全部高亮展示,就是为了让排障时一眼看出问题到底在「簽章」「时间」还是「Claims」。
JWT 与 Session 不是替代关系。Session 把使用者状态存到服务端(Redis / 数据库),JWT 把状态装进 Token 里。微服务架构、无状态 API、移动端、CORS 跨域场景下 JWT 更省事;但传统企业系统、要求实时撤销(如「踢人下线」)的场景仍更适合 Session。本工具同时适合「纯 JWT 调试」与「Session 转 JWT 迁移」中的 Token 解析、簽章验证、Payload 编辑场景。