1. JWT 概述:什么是 JWT、与传统 Session 认证的区别、应用场景

1.1 什么是 JWT

JWT(JSON Web Token) 是一种基于 JSON 格式的开放标准(RFC 7519),用于在各方之间以紧凑、自包含的方式安全传输信息。JWT 通常被用于身份认证和信息交换场景,其核心特点是:服务端无需存储会话状态,所有用户身份信息都编码在 Token 本身中。

一个 JWT 由三部分组成,以点号(.)分隔:

Header.Payload.Signature
  • Header(头部):声明 Token 类型(JWT)和签名算法(如 HS256、RS256)。
  • Payload(载荷):存放实际数据,如用户 ID、角色、过期时间(exp)、签发时间(iat)等。
  • Signature(签名):对前两部分进行签名,防止数据被篡改。
关键理解:JWT 是“自包含”的——服务端不需要查数据库或 Session 存储来验证用户身份,只需验证签名即可。
JWT 结构分解图 JWT 结构分解 Header 算法 & 类型 {"alg":"HS256","typ":"JWT"} Payload 用户数据 & 声明 {"sub":"123","role":"admin"} Signature 防篡改签名 HMACSHA256(…) 最终格式:Header.Payload.Signature(如:xxxxx.yyyyy.zzzzz)

1.2 JWT 与传统 Session 认证的区别

传统 Session 认证是“有状态”的,服务端需要维护 Session 存储;JWT 认证是“无状态”的,服务端只需验证签名。以下是两者的核心对比:

对比维度 传统 Session 认证 JWT 认证
状态存储 服务端内存/数据库/Redis 存储 Session 客户端存储 Token,服务端无状态
扩展性 需要共享 Session 存储(如 Redis 集群) 天然支持水平扩展,无需共享存储
跨域支持 受限于 Cookie 同源策略,跨域复杂 通过 HTTP Header 携带,跨域友好
安全性 依赖 Cookie 安全属性(HttpOnly、Secure) 依赖签名验证,防篡改,但需防范 XSS
性能 每次请求需查询 Session 存储 仅需本地验证签名,无 I/O 开销
Token 失效 服务端可主动删除 Session 需等待过期或维护黑名单
注意:JWT 的“无状态”是一把双刃剑——它提升了扩展性和性能,但 Token 签发后无法立即失效(除非引入黑名单机制),因此在设计时需合理设置过期时间。

1.3 JWT 的应用场景

JWT 在以下场景中表现出色,已成为现代 Web 和移动端认证的主流方案:

  • 单点登录(SSO):JWT 的跨域特性使其成为 SSO 系统的理想选择,用户登录一次即可访问多个子系统。
  • 移动端 API 认证:移动端不依赖 Cookie,JWT 通过 Authorization Header 携带,适配 iOS/Android 原生请求。
  • 微服务间认证:服务间调用时,JWT 可携带用户身份和权限信息,无需每次请求都查询用户中心。
  • 前后端分离架构:Vue/React + Spring Boot / Go 等架构中,JWT 是标准认证方案。
  • 第三方 API 授权:JWT 可作为 API 密钥的替代方案,携带有限权限和有效期。
JWT 应用场景架构图 JWT 典型应用场景 JWT Token 单点登录 (SSO) 移动端 API 微服务认证 前后端分离 JWT 的无状态特性使其在分布式、跨域场景中具有天然优势
课程要点:JWT 的核心价值在于“无状态 + 自包含”,这使得它成为现代分布式系统认证的首选方案。但无状态也意味着 Token 签发后无法立即撤销,因此在实际项目中通常搭配短过期时间 + Refresh Token 机制使用。