SPA所用B2C自定义策略access_token有效期及相关机制咨询
Azure AD B2C 令牌生命周期相关问题解答
1. access_token 的实际有效期
公开文档中提到的24小时上限是未同步更新的过时内容,对应旧版Azure AD以及B2C预置用户流的历史限制。当前B2C自定义策略的实际生效硬规则以策略上传时的平台校验提示为准:access_token有效期可配置范围为5分钟到10080分钟(即7天),你解码令牌得到的7天有效期就是实际生效的数值,不存在配置不生效的问题。
2. 7天有效期access_token的持久会话相关判断
你的理解存在部分偏差:
- MSAL的默认逻辑确实是优先读取本地存储的未过期access_token发起接口请求,不会主动触发令牌刷新流程。如果将access_token存储在localStorage中,且用户不手动清除浏览器缓存、不主动触发登出操作、租户侧没有开启条件访问策略/主动撤销用户会话,那么这个7天有效期的access_token确实可以直接用于接口鉴权,不需要中途重新认证。
- 你提到的「refresh_token有效期为不可延长的24小时」同样是过时的文档描述,当前B2C自定义策略中的refresh_token最长可配置为90天,且支持滚动续期。不过只要本地存储的access_token未过期,refresh_token的状态不会影响已签发access_token的正常使用。
- 需要注意的例外场景:如果你的应用代码主动调用强制刷新令牌的逻辑、或者接入的受保护接口有独立的应用侧会话超时校验,那么哪怕access_token本身没过期,也可能触发重新认证要求。
3. B2C自定义策略会话生命周期的作用
自定义策略中配置的会话生命周期是B2C服务端维护的登录会话有效期,和应用侧拿到的令牌是完全独立的两层逻辑:
- 该会话存储在B2C域名下的加密Cookie中,核心作用是判断用户在访问B2C登录端点、发起令牌刷新请求时,是否已经完成过身份认证,是否需要弹出登录交互界面。
- 举个实际场景:如果你把服务端会话生命周期配置为2小时,那么2小时后即使用户手里持有的refresh_token还在标注的有效期内,发起刷新请求时B2C也会拒绝发新令牌,要求用户重新完成身份验证。
- 服务端会话状态不会直接修改已经签发到应用侧的access_token有效性,只要access_token本身没过期、没被吊销,接口侧就会认这个凭证。
4. 自定义策略会话配置、access_token、MSAL三者的关联
三者是规则源、凭证、客户端工具的层级关系:
- 自定义策略是所有规则的唯一来源:access_token、refresh_token的有效期、刷新规则、服务端会话的时长和行为,全部由自定义策略中的配置决定,平台所有令牌签发、会话校验逻辑都以策略配置为准。
- access_token、refresh_token是B2C签发给应用的身份凭证:access_token用于直接访问受保护资源,refresh_token用于在access_token过期后向B2C申请新的令牌,刷新请求能否通过,取决于B2C服务端会话是否有效、refresh_token是否未被吊销。
- MSAL是运行在应用侧的令牌管理工具:它本身不定义任何有效期规则,只负责按照B2C返回的令牌过期时间,完成本地令牌存储、过期前自动用refresh_token申请新令牌、登录登出跳转等操作,所有行为都受限于B2C返回的令牌状态和初始化时传入的配置参数。
注:B2C自定义策略的公开文档更新滞后是长期存在的问题,所有配置限制优先以策略上传时的平台校验提示、实际签发的令牌声明为准。
内容的提问来源于stack exchange,提问作者milorad
相关产品推荐
相关产品推荐

