什么是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
相关产品推荐
相关产品推荐

