记录 AccessToken 与 RefreshToken 的基本概念、常见使用策略以及在后端系统中的实现要点。
一、基本概念
- AccessToken
用于访问受保护资源的令牌,通常有效期较短(如 15 分钟、1 小时)。 - RefreshToken
用于刷新 AccessToken 的令牌,有效期较长(如 7 天、30 天),不可直接访问资源。
二、常见使用策略
短期 AccessToken + 长期 RefreshToken
- 用户登录时返回两者
- 前端存储在安全位置(建议 httpOnly Cookie 保存)
- AccessToken 过期后,用 RefreshToken 换取新的 AccessToken
后端刷新接口
- 提供
/refresh
接口 - 校验 RefreshToken 有效性
- 生成新的 AccessToken 并返回
- 提供
三、示例流程
登录时返回 Token
{
"access_token": "eyJhbGciOi...",
"refresh_token": "eyJhbGciOi...",
"expires_in": 3600
}
刷新 Token
POST /refresh
Authorization: Bearer <refresh_token>
返回:
{
"access_token": "new_access_token",
"expires_in": 3600
}
四、后端实现要点
- AccessToken 适合使用 JWT(方便无状态验证)
- RefreshToken 需要在数据库/Redis 存储,便于失效管理
- 登录、登出、修改密码等操作需立即失效相关 RefreshToken
- 刷新时重新生成新的 RefreshToken(防止固定令牌长期可用)
五、安全注意事项
- AccessToken 设置较短有效期,降低泄露风险
- RefreshToken 存储必须安全(httpOnly + Secure)
- 防止 RefreshToken 重放攻击,可结合设备信息、IP 绑定校验
- 考虑在多端登录场景中独立管理每个终端的 RefreshToken
六、小结
AccessToken 负责访问控制,RefreshToken 负责续期,两者配合可兼顾安全性与用户体验。