记录 AccessToken 与 RefreshToken 的基本概念、常见使用策略以及在后端系统中的实现要点。


一、基本概念

  • AccessToken
    用于访问受保护资源的令牌,通常有效期较短(如 15 分钟、1 小时)。
  • RefreshToken
    用于刷新 AccessToken 的令牌,有效期较长(如 7 天、30 天),不可直接访问资源。

二、常见使用策略

  1. 短期 AccessToken + 长期 RefreshToken

    • 用户登录时返回两者
    • 前端存储在安全位置(建议 httpOnly Cookie 保存)
    • AccessToken 过期后,用 RefreshToken 换取新的 AccessToken
  2. 后端刷新接口

    • 提供 /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 负责续期,两者配合可兼顾安全性与用户体验。