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

什么是refresh token?AADB2C中能否控制ID、Access token的刷新?

问题1解答

你看到的现象是MSAL内部的默认逻辑导致的:AcquireTokenSilent 不会仅依赖缓存中未过期的ID令牌和Access令牌,只要MSAL缓存中还留存有效的refresh token,它就会自动用refresh token向AAD B2C兑换新的ID、Access令牌,全程不需要用户交互。你所说的“退出登录”如果只是关闭应用、没有主动清理MSAL的令牌缓存,那refresh token会一直保留在缓存中,只要它还在有效期内,再次打开应用调用AcquireTokenSilent就会自动完成刷新,不需要用户输入凭据。

问题2解答

是的。只要refresh token本身处于有效状态,这个自动刷新的过程就会持续进行。每次刷新成功后MSAL会自动更新缓存中的令牌,直到refresh token失效时,AcquireTokenSilent就会抛出异常,此时你需要调用AcquireTokenInteractive引导用户重新交互登录。

问题3解答

refresh token不可能永久有效,有两个核心限制:

  • AAD B2C的refresh token默认存在最长滑动有效期,即便每次刷新都获取新的refresh token,只要达到最长滑动窗口时长,refresh token就会强制失效,用户必须重新登录。
  • 还有很多场景会导致refresh token提前失效,包括用户修改密码、管理员手动吊销用户令牌、你主动调用MSAL接口清除账户缓存、AAD B2C策略配置变更等,这些场景下即使refresh token还没到标注的过期时间,也无法继续使用。

问题4解答

完全可以自定义控制,分为配置层面和代码层面两类操作:

  • 配置层面:你可以在AAD B2C的用户流或自定义策略中,自定义ID令牌、Access令牌的过期时长,也可以调整refresh token的固定有效期、滑动窗口最大时长,从规则上控制刷新的边界。
  • 代码层面:你可以自行判断当前缓存中令牌的过期时间,提前主动触发AcquireTokenSilent完成刷新;如果需要强制用户重新登录,直接调用MSAL的账户移除接口清空缓存即可,会直接作废当前所有缓存的令牌,后续必须走交互登录流程。针对敏感操作场景,你也可以手动触发刷新,不需要依赖MSAL的默认刷新时机。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 05:15:05