1. JWT 基础:结构、工作原理与 Session 对比

JSON Web Token(JWT)是目前分布式系统中最主流的无状态认证令牌格式。理解 JWT 的底层结构、签发验签流程以及与 Session 的差异,是构建安全缓存验签闭环的第一步。

1.1 JWT 结构:三段式令牌

一个标准 JWT 由三个 Base64URL 编码的片段组成,以点号 . 分隔:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.
POstGetfAytaZS82wHcjoTyoqhMyxXiWdR7Nn7A29DNSl0EiXLdwJ6xC6AfgZWF1bOsS_TuYI3OG85AmiExREkrS6tDfTQ2B3WXlrrPpF3V1eSfA0h0o7EoGfv2lLqLpG7lF2gH6s6xGqX8G6r1g3Y9z3wX5z7y8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3
片段 名称 内容说明 是否加密
第一部分 Header 签名算法(如 RS256、HS256)和令牌类型(JWT) 仅 Base64 编码,明文可读
第二部分 Payload 声明(Claims):用户标识、角色、过期时间等 仅 Base64 编码,明文可读
第三部分 Signature 对前两部分的签名,用于防篡改验证 由密钥/私钥生成,不可伪造
关键认知:Payload 是明文编码而非加密。任何能解码 Base64URL 的人都可以读取 Payload 内容。JWT 的安全性依赖 Signature 防篡改,而非 Payload 的机密性。敏感信息(如密码、身份证号)绝不可放入 Payload。

1.2 JWT 工作原理:签发与验签流程

JWT 的工作流程分为签发(Issuance)和验签(Verification)两个阶段,核心是服务端不保存会话状态。

无状态核心:服务端只持有密钥/公钥,不存储 JWT 本身。每次请求携带 JWT,服务端独立完成验签,无需查询数据库或缓存。
JWT 签发与验签完整流程 客户端 认证服务 业务服务 ① 登录请求 生成 JWT ② 返回 JWT 存储 JWT ③ 请求携带 JWT(Authorization: Bearer) 验签 JWT 验签通过 ④ 返回业务数据 流程要点说明 • 步骤①-②:认证服务验证用户身份后签发 JWT,返回给客户端。 • 步骤③:客户端在后续请求的 HTTP Header 中携带 JWT。 • 步骤④:业务服务使用本地密钥/公钥独立验签,无需查询认证服务。 • 整个流程中,服务端不保存任何会话状态,实现无状态认证。

1.3 JWT 与 Session 对比

Session 认证是传统的服务端有状态方案,JWT 是分布式架构下的无状态替代方案。两者在存储、扩展性、安全性方面有本质差异。

对比维度 Session 认证 JWT 认证
状态存储 服务端内存/Redis,有状态 客户端令牌,无状态
扩展性 需共享 Session 存储(如 Redis 集群),水平扩展复杂 服务端无共享状态,天然支持水平扩展
跨域/跨服务 需配置跨域 Cookie 或 Session 同步,实现复杂 令牌自包含,跨服务传递简单
吊销能力 服务端直接删除 Session,实时生效 需配合黑名单/短过期时间,吊销成本高
令牌体积 仅 Session ID(短字符串) 包含完整 Payload,体积较大
安全风险 CSRF 攻击风险较高,需 Token 防护 XSS 窃取令牌风险较高,需 HttpOnly 等防护
选型建议:单体应用或中小型系统优先考虑 Session + Redis,吊销方便且实现简单。微服务架构、移动端、跨域场景优先选择 JWT。但 JWT 并非万能——令牌一旦签发,在过期前无法主动失效,必须配合短过期时间(如 15 分钟)和 Refresh Token 机制来降低风险。

1.4 JWT 与 Session 架构对比图

下图从架构层面直观展示 Session 认证与 JWT 认证在服务端状态管理上的核心差异。

Session 认证 vs JWT 认证架构对比 Session 认证(有状态) 客户端 服务端 A Session ID 服务端 B 服务端 C 共享 Session 存储(Redis) 所有服务必须连接同一存储 JWT 认证(无状态) 客户端 服务端 A JWT 服务端 B 服务端 C 无需共享存储 每个服务独立验签,水平扩展无瓶颈 瓶颈:共享存储成为单点,扩容需同步 Session 优势:无共享状态,服务独立,弹性伸缩

1.5 核心要点总结

  • JWT 三段结构:Header(算法声明)、Payload(用户声明)、Signature(防篡改签名)。Payload 是明文,不可存放敏感数据。
  • 无状态认证:服务端不保存 JWT,每次请求独立验签,天然支持水平扩展和微服务架构。
  • Session vs JWT:Session 有状态、吊销方便、适合单体;JWT 无状态、跨域友好、吊销困难。选型需结合业务场景。
  • 安全基线:JWT 必须使用强签名算法(推荐 RS256 或 ES256),设置合理的过期时间(如 15 分钟),配合 Refresh Token 实现安全续期。