JWT vs 会话 Cookie:何时使用什么
10 min read
JWT, Security, Authentication
理解差异
JWT 和会话 cookie 都是维护用户身份验证状态的方法,但它们的工作方式不同。
会话 Cookie
工作原理
- 服务器创建会话并将其存储在内存/数据库中
- 会话 ID 作为 cookie 发送给客户端
- 客户端在每个请求中发送 cookie
- 服务器使用 ID 查找会话数据
优点
- 可以立即失效
- 体积较小(仅包含会话 ID)
- 服务器完全控制
缺点
- 需要服务器端存储
- 难以水平扩展
- 不适合移动应用
JWT 令牌
工作原理
- 服务器创建并签名令牌
- 令牌发送给客户端
- 客户端存储令牌(localStorage、cookie 等)
- 客户端在每个请求中发送令牌
- 服务器验证令牌签名
优点
- 无状态且可扩展
- 跨不同域工作
- 移动友好
- 包含用户信息
缺点
- 无法在过期前失效
- 体积较大
- 如果密钥泄露则易受攻击
何时使用什么?
使用会话 Cookie 的场景:
- 需要立即撤销
- 使用传统 Web 应用程序
- 拥有单体架构
- 安全性至关重要
使用 JWT 的场景:
- 构建微服务或分布式系统
- 需要跨域身份验证
- 构建移动或单页应用程序
- 想要减少数据库查找
混合方法
许多现代应用程序使用混合方法:短期 JWT 配合存储为安全 HTTP-only cookie 的刷新令牌。这结合了两种方法的优点。