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

Openiddict中Refresh Token Rolling的作用是什么?为何存在双刷新令牌过期配置

Refresh Token Rolling 的核心设计目的

Refresh Token Rolling 是OAuth/OIDC生态里针对长生命周期刷新令牌设计的安全机制,核心设计目标是在不降低用户登录体验的前提下,最大化降低刷新令牌的泄露和重放风险,具体覆盖三类核心诉求:

  • 降低用户重复登录的打扰频率:传统固定有效期的刷新令牌一旦到期,无论用户是否在持续活跃使用服务,都需要强制重新完成账号密码、多因子校验等认证流程。滚动机制的规则是,每当客户端使用有效刷新令牌换取新的访问令牌和新的刷新令牌时,就会基于本次交易时间顺延刷新令牌的有效周期——只要用户持续活跃使用服务,就不需要反复触发重新认证流程。
  • 收敛长期凭证的泄露风险:如果没有滚动机制的约束,刷新令牌的有效期会被无限顺延,一旦发生令牌泄露,攻击者可以长期冒用用户身份。滚动机制会为单个刷新令牌的会话链设置硬上限,无论用户活跃多久,达到上限后都必须重新完成完整认证。
  • 从机制上阻断刷新令牌重放攻击:滚动机制下,每一次成功的刷新令牌兑换请求,都会让上一个版本的旧刷新令牌立刻进入失效状态。如果攻击者窃取到已经被用户正常使用过的旧刷新令牌,根本无法用这个旧令牌完成身份冒用,从设计层面杜绝了刷新令牌被复用的可能。
为什么会存在两套独立的过期时间规则

你在OpenIddict配置里观察到的「14天有效期+30秒短时校验窗口」,本质是两个完全独立的参数,分别服务不同的场景,不存在逻辑冲突:

  • 第一套规则:14天的绝对生命周期上限
    这个值对应OpenIddict里配置的RefreshTokenLifetime参数,是和滚动机制绑定的硬约束,指从刷新令牌首次被签发开始计算,这个刷新令牌的会话链最长可以存续14天。哪怕用户每几秒就用一次刷新令牌续期,到了14天的时间节点,整个刷新令牌链也会彻底失效,必须重新走完整认证流程。设置这个硬上限的目的,是避免单个登录会话无限制存续,从根上控制身份凭证的最长暴露窗口。
  • 第二套规则:30秒的短时滑动接受窗口
    这个值对应滚动机制配套的宽限周期配置,不是给刷新令牌设置的有效期,而是为了适配客户端并发请求的兼容设计。实际业务场景中,很多前端应用为了提升效率,会在检测到访问令牌即将过期时,同时发起多个并发的刷新请求——如果没有这个窗口,第一个请求会把旧刷新令牌标记为已使用、直接失效,后续跟着发起的并发请求就会因为令牌失效被拒绝,直接导致前端出现无意义的登录态中断报错。
    这个30秒的窗口,就是允许在旧刷新令牌已经被标记为失效后的短时间内,依然接受旧令牌完成兑换,等窗口超时后再彻底拒绝。窗口时长本身设置得极短,就是为了在兼容客户端并发逻辑的同时,不给攻击者留出可利用的重放时间窗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 14:15:04