续期策略

会话多久过期

会话生命周期设计,本质是在「用户省事」和「风险窗口」之间找平衡。两种极端策略:

策略做法体验风险
固定过期登录后 7 天必须重新登录差,到点就被踢低,窗口固定
滑动过期持续活跃自动延长好,一直活跃一直有效高,窗口可能无限拉长

滑动过期的隐患

滑动过期有个隐藏风险:用户只要保持活跃,会话可以一直延续,理论上永不失效。如果用户长期不退出,一旦设备或凭证泄露,攻击者能用的窗口就是「无限长」。

组合方案

生产系统很少二选一,而是用三个时间点组合:

  1. 短期 Access Token:分钟级,控制单次请求暴露窗口。
  2. 较长 Refresh Token:天级(如 30 天),用户活跃时自动续期。
  3. 绝对生命周期上限:如 30 天,无论多活跃,到点必须重新登录。

这样:

  • 正常用户持续活跃,用 Refresh Token 无感续期,体验好。
  • 但即便一直活跃,超过绝对上限也要重新登录,风险窗口有边界。

续期的可视化

把三个时间点画出来,就是这样的关系:

登录 ──────────────── 绝对上限(30 天)────────────────
  │
  ├── Access(15min)──┐
  │                   ├── 刷新 → 新 Access + 新 Refresh
  └── Refresh(30天)──┘
         (每次刷新轮换,旧的作废)

只要用户在活跃,Refresh Token 会不断续期;但超过 30 天绝对上限,就强制回到登录页。

续期的安全细节

  • 轮换:每次刷新签发新 Refresh Token,旧值作废,防重放。
  • 静默刷新:在后台悄悄刷新 Access Token,用户无感。
  • 阈值控制:活跃度低(长时间无请求)的会话,即使未到上限,也可以要求重新认证。
  • 绝对上限按业务调:金融、内部系统更短;普通内容站点可放宽。

上线检查

  • 是否定义了 Access、Refresh、绝对上限三个时间点?
  • 是否有绝对生命周期上限,防止滑动过期无限拉长?
  • Refresh Token 是否轮换、绑定设备、可撤销?
  • 活跃度低的会话是否有降级 / 重新认证策略?

会话「活多久」的问题解决了,下一节看怎么「提前掐断」——撤销与强制下线。

发现内容有问题?

告诉我们哪里需要改进。