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 编辑场景。