JWT领域建模与架构设计 - 第1节

1.1 JWT 定义与核心原理

JSON Web Token(JWT)是一种基于 JSON 的开放标准(RFC 7519),用于在各方之间以紧凑且自包含的方式安全传输信息。JWT 通常被用于身份认证和信息交换场景,其核心特征在于:令牌本身即包含所有必要的用户信息,服务端无需维护会话状态。

核心公式: JWT = Header(头部) + Payload(载荷) + Signature(签名)

一个典型的 JWT 字符串由三个 Base64URL 编码的部分组成,以点号(.)分隔:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT 三部分结构详解

组成部分 内容说明 示例字段
Header(头部) 声明令牌类型(JWT)和签名算法(如 HMAC SHA256、RSA) {"alg":"HS256","typ":"JWT"}
Payload(载荷) 存放实际声明(Claims),包括用户身份、过期时间等 {"sub":"123","name":"John","iat":1516239022}
Signature(签名) 对 Header 和 Payload 进行签名,防止数据被篡改 使用密钥对前两部分计算哈希值
安全提示: Payload 仅经过 Base64URL 编码,并未加密。敏感信息(如密码、信用卡号)不应直接放入 JWT 载荷中,除非使用 JWE(JSON Web Encryption)进行加密。
JWT 令牌结构示意图 Header(头部) 算法 + 令牌类型 {"alg":"HS256","typ":"JWT"} Payload(载荷) 声明(Claims) 用户身份、过期时间等 Signature(签名) 防篡改验证 HMAC / RSA 签名 JWT 令牌生成流程 1. 对 Header 和 Payload 分别进行 Base64URL 编码 2. 将编码后的两部分用点号连接:header.payload 3. 使用密钥对连接后的字符串进行签名,生成 Signature 4. 最终令牌格式:header.payload.signature

1.2 JWT 与 Session/Cookie 对比

在 Web 应用认证领域,JWT 与传统的 Session/Cookie 方案是两种主流选择。理解它们的差异,是构建安全架构的第一步。

对比维度 Session / Cookie JWT(无状态令牌)
状态存储 服务端存储 Session,客户端存储 Cookie ID 令牌自包含,服务端无需存储会话
扩展性 需要共享 Session 存储(如 Redis)或粘性会话 天然支持水平扩展,任何服务节点均可验证
跨域支持 受同源策略限制,跨域需额外配置 通过 HTTP Header 传递,天然支持跨域
安全性 依赖 Cookie 的 HttpOnly/Secure 属性防 XSS 签名防篡改,但需防范 XSS 导致令牌泄露
吊销机制 服务端直接删除 Session 即可 需维护黑名单或缩短过期时间
性能开销 每次请求需查询 Session 存储 仅需计算签名验证,无 I/O 开销
架构决策要点: 如果你的应用是单体架构且用户量不大,Session/Cookie 方案实现简单、吊销方便。如果是分布式微服务架构、移动端或单页应用(SPA),JWT 的无状态特性更具优势。但 JWT 的令牌吊销难题需要通过额外机制(如令牌黑名单、短有效期+刷新令牌)来解决。
Session vs JWT 认证流程对比 Session/Cookie 方案 客户端 服务端 ① 登录请求 ② 创建 Session ③ 返回 Cookie ④ 携带 Cookie 请求 ⑤ 查询 Session JWT 无状态方案 客户端 服务端 ① 登录请求 ② 生成 JWT ③ 返回 JWT ④ 携带 JWT 请求 ⑤ 验证签名

1.3 JWT 典型应用场景

JWT 因其无状态、跨域友好、自包含等特性,在以下场景中得到了广泛应用:

  • 单点登录(SSO): JWT 作为统一的身份令牌,在多个子系统间传递,用户只需登录一次即可访问所有信任的应用。
  • 移动端 API 认证: 移动端无法使用 Cookie 机制,JWT 通过 Authorization Header 传递,天然适配 iOS/Android 客户端。
  • 微服务间通信: 服务间调用时,JWT 携带调用方身份和权限信息,接收方直接验证令牌即可,无需调用认证中心。
  • 无状态 RESTful API: 每个请求都携带完整的认证信息,服务端无需维护会话,便于水平扩展和负载均衡。
  • 信息交换: JWT 的签名机制确保数据在传输过程中未被篡改,可用于安全的身份信息交换。
最佳实践: 在微服务架构中,建议使用 Access Token(短有效期,如 15 分钟) + Refresh Token(长有效期,如 7 天) 的组合方案。Access Token 用于实际资源请求,Refresh Token 用于无感续期,既保证了安全性,又提升了用户体验。
JWT 典型应用场景架构 JWT 令牌 单点登录(SSO) 移动端 API 认证 微服务间通信 无状态 RESTful API 核心优势:无状态、跨域友好、自包含、易于水平扩展 适用于分布式系统、移动端、单页应用(SPA)等现代架构