登录后拿到的 eyJhbGciOi... 长串就是 JWT。它由三段点号分隔,本文拆开讲清每段内容和安全边界。
JWT 由 Header(算法和类型)、Payload(声明数据)、Signature(签名)三段组成,点号分隔后分别 Base64Url 编码。Header 和 Payload 只是编码不是加密,任何人都能解开看内容。
签名 = HMAC( Header + . + Payload , secret )。服务端用密钥重新计算签名并与 Token 中的比对,一致则未被篡改。这就是 JWT 无需服务端存储也能验证的原因。
iss 签发者、sub 主题(用户 ID)、exp 过期时间、iat 签发时间、nbf 生效时间、jti 唯一标识。exp 是 Unix 时间戳,过期后服务端应拒绝。
绝不在 Payload 放密码等敏感信息(因为只是 Base64 编码);密钥必须足够复杂且只存服务端; Token 签发后无法主动作废,敏感操作需配合黑名单或短有效期加刷新机制。
Session 状态存服务端,可主动失效;JWT 无状态自包含,服务端不存,签发后在过期前难以作废。
技术上不限,但 Token 每个请求都要传输,建议只放必要标识,控制在几百字节内。
JWT 使用 Base64Url 编码 UTF-8 字节,确保解码工具按 UTF-8 还原即可。