拓展 JWT 与 UUID 的关系
1. 功能分工
-
JWT(访问令牌)
- 作用:短期身份凭证,可以携带用户信息(如
sub
,iat
,exp
等),用于直接访问受保护资源。 - 特点:自包含(无需查库验证)、有效期短(15-60分钟)、通过签名防篡改。
- 安全性:依赖签名算法(如 HS256/RS256)和短有效期降低泄露风险。
- 作用:短期身份凭证,可以携带用户信息(如
-
UUID(刷新令牌)
- 作用:长期凭证,仅用于获取新的访问令牌(或刷新令牌本身)。
- 特点:无实际含义的随机字符串、存储在后端数据库、有效期长(7-30天)。
- 安全性:依赖唯一性和后端存储的关联验证,需严格保护防泄露。
2. 协作流程
-
登录阶段
- 用户认证成功后,系统生成:
- 短期 JWT:包含用户信息(如
sub
)和唯一标识jti
(可基于 UUID 生成)。 - 长期 UUID 刷新令牌:随机生成,与用户 ID、设备信息关联存储到数据库。
- 短期 JWT:包含用户信息(如
- 客户端同时收到 JWT 和 UUID 刷新令牌。
- 用户认证成功后,系统生成:
-
访问资源
- 客户端用 JWT 访问 API,服务端直接验证签名和有效期,无需查库。
-
令牌刷新
- 当 JWT 过期,客户端用 UUID 刷新令牌请求新令牌:
- 服务端检查该 UUID 是否有效(查库比对)、是否被撤销。
- 若有效,生成新 JWT 和可能的新的 UUID 刷新令牌(旧 UUID 可能被标记为失效)。
- 当 JWT 过期,客户端用 UUID 刷新令牌请求新令牌:
3. 设计关系
-
用户唯一性管理
- JWT 的
jti
:可用 UUID 生成,确保每个令牌唯一,便于撤销或追踪。 - 刷新令牌本身:直接使用 UUID,确保全局唯一性,避免冲突
- JWT 的
-
安全隔离
- JWT 通过签名保护数据完整性,但内容可能被解码(仅防篡改,不加密)。
- UUID 不携带信息,仅作为数据库主键,需后端验证其有效性。
-
多设备支持
- 每个设备的刷新令牌分配独立 UUID,便于单独管理(如强制某设备下线)。
4. 总结
- JWT 是短期、自包含的访问令牌,通过签名保障安全性,适合高频访问。
- UUID 是长期、无状态的刷新令牌标识符,依赖后端存储管理,适合低频续订操作。
- 两者结合实现了 短期授权 与 长期会话管理 的平衡,兼顾安全性与用户体验。