You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JWT中Refresh Token的作用及正确实现方案问询

JWT中Refresh Token的实现与常见问题解答

核心结论:Refresh Token无法完全无状态实现——要解决令牌吊销、滥用防护等核心问题,必须引入持久化存储(如数据库)追踪令牌状态,这是权衡安全性与用户体验的必要代价,JWT的无状态优势仅体现在Access Token的验证环节。


1. 如何吊销Refresh Token?

你判断的没错,无状态场景下无法实现令牌吊销,必须依赖数据库存储。建议设计专门的refresh_tokens表,核心字段包括:

  • token_hash:Refresh Token的哈希值(避免明文存储)
  • user_id:关联的用户ID
  • expires_at:令牌过期时间
  • revoked:布尔标记,标识令牌是否已被吊销
  • device_fingerprint:可选,存储设备UA、IP哈希等信息,用于多设备管理

每个用户可对应多个Refresh Token(支持多设备登录场景),吊销时只需将目标令牌的revoked字段设为true,后续刷新Access Token时先校验该状态即可。

2. 如何防止Refresh Token被滥用?

可从多维度构建防护机制:

  • 绑定设备上下文:签发Refresh Token时,将设备标识(如UA哈希、设备唯一ID)写入令牌声明和数据库,刷新时校验上下文一致性,避免跨设备滥用
  • 设置合理过期窗口:Refresh Token有效期建议设为7-30天,既保证用户体验,又限制攻击者的滥用时长;Access Token则设为15-60分钟
  • 强制HTTPS传输:全程加密令牌传输,防止被中间人截获
  • 刷新频率限制:对同一Refresh Token的刷新请求添加频率限制,避免攻击者批量生成Access Token
  • 主动触发吊销:用户主动登出时吊销对应设备的Refresh Token,修改密码时吊销该用户所有Refresh Token

3. Refresh Token是否应设为一次性使用?

一次性使用的安全性更高——每次刷新Access Token时,签发新的Refresh Token并作废旧令牌。但该模式必须依赖数据库:刷新时先验证旧令牌的有效性(未过期、未吊销),然后标记旧令牌为吊销,生成新令牌存入数据库并返回给客户端。

无状态场景下无法实现一次性使用,因为JWT本身不可修改,无法标记旧令牌作废。若追求极致安全,推荐采用一次性Refresh Token模式,性能损耗远低于安全风险带来的损失。

4. 在Refresh Token中加入数据库存储的唯一ID是否可行?

这个思路本质是常规的Refresh Token存储方案,但存在细节缺陷需要注意:

  • 若使用用户记录的唯一ID(如user_id),修改该ID会破坏用户数据关联,完全不可行
  • 若为每个Refresh Token生成独立的唯一ID(如token_uuid)并存入数据库,刷新时校验ID对应的令牌状态(未过期、未吊销)——这是可行的,但需注意:
    • 不要将敏感的数据库ID明文写入Refresh Token声明,建议使用哈希或加密后的ID
    • 刷新时必须同时验证令牌签名和数据库中的状态,缺一不可

总结与核心流程

不存在完全无状态的Refresh Token集成方案,因为Refresh Token的核心作用就是弥补JWT无法吊销的缺陷,而吊销必然需要状态存储。

你提到的视频对流程有帮助,这里补充核心实现步骤:

  1. 用户登录验证通过后,生成短期Access Token(含用户权限、过期时间等声明)和长期Refresh Token(含用户ID、设备上下文、令牌唯一标识等声明)
  2. 将Refresh Token的哈希值、关联用户ID、过期时间、设备信息存入数据库
  3. 客户端将Access Token存于内存(或HttpOnly Cookie),Refresh Token存于HttpOnly Secure Cookie(禁止JS读取,防范XSS)
  4. 客户端用Access Token访问受保护资源,令牌过期后,用Refresh Token向服务器请求新的Access Token
  5. 服务器先验证Refresh Token的签名有效性,再查询数据库确认令牌未过期、未吊销、设备上下文匹配
  6. 验证通过后,生成新的Access Token(若采用一次性模式,同时生成新的Refresh Token),返回给客户端并作废旧Refresh Token
  7. 用户主动登出或改密时,服务器标记对应Refresh Token为吊销

内容的提问来源于stack exchange,提问作者user13020816

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:07:37