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

Azure AD B2C中如何刷新90天生命周期令牌及判断临近过期状态

Azure AD B2C 安卓MSAL开发刷新令牌生命周期处理方案

核心机制说明

首先明确两个有效期的对应逻辑:

  • 你观察到的60分钟有效期是访问令牌/ID令牌有效期,MSAL的profile.getExpiresOn()返回的就是该值,用于判断短期访问令牌是否需要静默刷新
  • 90天的是刷新令牌最大生命周期,属于B2C用户流的会话配置,MSAL安卓SDK未公开API直接获取该生命周期的到期时间,因为刷新令牌是不透明凭证,由MSAL内部托管不对外暴露明文属性。

适配离线共享设备场景的落地方案

针对你需要提前提示用户的需求,可通过以下方式实现:

方案1:本地持久化记录生命周期基准时间(最优解)

  • 触发时机:用户每次完成交互登录(即调用acquireToken运行susi用户流成功)、或者调用acquireTokenSilent静默刷新成功时,将当前时间戳持久化存储到本地(如SharedPreferences、本地数据库)。
  • 到期判断:每次应用启动/用户操作时,计算当前时间与存储的基准时间的差值,若差值接近你配置的90天生命周期(如提前7天),直接弹出snackbar提示用户联网完成身份验证续期。
  • 优化点:可在Azure B2C用户流的「刷新令牌配置」中开启滚动更新策略,只要用户在90天有效期内有过成功的令牌获取操作,刷新令牌生命周期会自动向后顺延90天,对应你本地存储的基准时间也同步更新即可,只要用户不是连续90天完全离线未使用,无需重复交互登录。

方案2:错误捕获兜底

当刷新令牌超过90天生命周期后,调用acquireTokenSilent会返回固定错误码:

  • 错误类型为invalid_grant
  • 子错误码为interaction_required或refresh_token_expired
    捕获到该错误时,立刻弹窗引导用户走交互登录流程即可。

注意事项

目前MSAL官方未提供直接读取刷新令牌到期时间的接口,你提到的需求确实是常见的离线场景需求,行业内普遍采用本地记录基准时间的方式实现,没有额外兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:57:04