🔐 Token 认证基础
第4章 · 无状态 · 结构 · 生命周期
1. Token 的概念与结构
Token(令牌)是一串携带用户身份与授权信息的密文或明文数据,通常由服务端签发,客户端在每次请求时携带,用于证明身份。Token 的核心是自包含:将用户标识、权限、有效期等信息编码在令牌内,服务端无需查询会话即可验证。
典型 Token 结构(JWT 示例)
Header.Payload.Signature —— 三段式,Base64 编码,用点号连接。
2. 无状态认证原理
服务端不保存 Token 或会话信息,仅通过验证签名和声明来判断请求是否合法。每次请求都是独立的,无需查询数据库或缓存,天然支持水平扩展。
3. Token 与 Session 对比
| 维度 | Session-Cookie | Token (JWT) |
|---|---|---|
| 状态 | 有状态,服务端存储会话 | 无状态,自包含 |
| 扩展性 | 需共享 session 存储 | 天然水平扩展 |
| 跨域 | 受 Cookie 同源限制 | 可通过 Header 携带,跨域友好 |
| 安全 | CSRF 风险 | 需防范 XSS,签名防篡改 |
| 性能 | 服务端查询开销 | 验证签名,计算型 |
4. Token 的生命周期管理
Token 从生成到销毁经历:签发 → 传输 → 验证 → 刷新 → 撤销/过期。良好的生命周期管理是安全基石。
- 签发 认证通过后,服务端生成带过期时间的 Token。
- 传输 通过 HTTPS 的 Authorization Header 或 Cookie(HttpOnly)。
- 验证 服务端校验签名、有效期、权限。
- 刷新 使用 Refresh Token 获取新的 Access Token。
- 撤销 黑名单 / 短有效期 + 刷新机制。
💡 最佳实践: Access Token 短期(15分钟~1小时),Refresh Token 长期(7~30天),并配合 Token 黑名单或版本号实现即时撤销。