1. JWT 基础回顾:结构、原理与对比

JWT(JSON Web Token)是目前分布式架构中最主流的无状态认证令牌格式。理解其结构、工作原理以及与 Session 的差异,是后续优化令牌膨胀与缓存策略的前提。

1.1 JWT 结构:三段式令牌

一个 JWT 由 Header、Payload、Signature 三部分组成,以点号 . 分隔,整体格式为:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
部分 内容 示例
Header 令牌类型(typ)与签名算法(alg) {"alg":"HS256","typ":"JWT"}
Payload 声明(Claims):用户身份、权限、过期时间等 {"sub":"123","name":"John","iat":1516239022}
Signature 对 Header + Payload 的签名,防止篡改 HMAC-SHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
关键认知:Payload 仅做 Base64Url 编码,不是加密。敏感信息(如密码、身份证号)严禁放入 Payload。Signature 只保证数据完整性,不保证机密性。
JWT 三段式结构 Header alg: HS256 typ: JWT Payload sub: 1234567890 name: John Doe Signature HMACSHA256( base64(header).base64(payload), secret) 说明 • Header + Payload 仅做 Base64Url 编码,不加密 • Signature 使用密钥对前两段签名,保证数据未被篡改 • 服务端验证时重新计算签名,比对是否一致

1.2 JWT 工作原理

JWT 的工作流程分为 签发、传输、验证 三个阶段:

  1. 签发(Issuance):用户登录成功后,服务端生成 JWT,将用户标识、角色、权限等声明写入 Payload,使用密钥签名后返回给客户端。
  2. 传输(Transmission):客户端将 JWT 存储在 localStorage / Cookie / 内存中,每次请求时通过 HTTP Header Authorization: Bearer <token> 发送给服务端。
  3. 验证(Verification):服务端收到请求后,解析 JWT,验证签名是否有效、是否过期、是否被撤销(黑名单场景)。验证通过后,从 Payload 中提取用户信息进行授权。
无状态核心:服务端不存储会话信息,所有用户状态都包含在 JWT 自身。这消除了 Session 存储的数据库/缓存依赖,但也带来了令牌膨胀和无法主动失效的问题。
JWT 工作流程 客户端 浏览器 / App 服务端 验证 + 授权 ① 登录请求 ② 签发 JWT ③ 返回 ④ 携带 JWT ⑤ 验证签名 ⑥ 响应 流程要点 • 服务端不保存 JWT,仅验证签名和过期时间 • 令牌一旦签发,在过期前无法主动失效(除非引入黑名单) • 每次请求都携带完整令牌,导致 HTTP Header 体积膨胀

1.3 JWT 与传统 Session 对比

对比维度 JWT(无状态) Session(有状态)
存储位置 令牌自身携带所有信息,服务端不存储 服务端存储 Session 数据(内存 / Redis / DB)
扩展性 天然支持水平扩展,无需共享存储 需要共享 Session 存储(如 Redis)或粘性会话
主动失效 困难,需维护黑名单或缩短过期时间 容易,直接删除服务端 Session 即可
令牌体积 随权限声明增加而膨胀(令牌膨胀问题) 仅传递 Session ID,体积固定
安全性 Payload 仅编码不加密,敏感信息需额外加密 数据存储在服务端,客户端仅持有 Session ID
跨域支持 天然支持跨域(CORS + Bearer Token) 需配置跨域 Cookie 或额外方案
性能陷阱:JWT 的无状态特性在微服务架构中极具吸引力,但权限声明过多会导致令牌体积膨胀到 4KB ~ 10KB 甚至更大。每次请求都携带大令牌,会显著增加网络传输延迟和签名验证开销。这正是本课程后续要解决的核心问题。

1.4 典型应用场景

  • 单点登录(SSO):JWT 作为跨系统认证令牌,一次登录,多系统可用。
  • 移动端 / SPA 应用:无 Cookie 依赖,适合 RESTful API 认证。
  • 微服务网关:网关验证 JWT 后,将用户信息透传给下游服务。
  • 短期授权:如密码重置链接、API 临时访问令牌,利用 JWT 自包含过期时间。