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 存储来验证用户身份,只需验证签名即可。
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 的核心价值在于“无状态 + 自包含”,这使得它成为现代分布式系统认证的首选方案。但无状态也意味着 Token 签发后无法立即撤销,因此在实际项目中通常搭配短过期时间 + Refresh Token 机制使用。