Azure AD B2C账户删除后如何失效已有B2C会话并清除旧objectId?
Azure AD B2C 自主删账后会话残留问题解决方案
方案1:删账流程末尾主动清除B2C SSO会话
在你的删除账户用户旅程中,确认用户已从目录删除完成后,新增一个步骤调用专门的会话清除技术配置文件,配置示例如下:
<TechnicalProfile Id="Session-Clear"> <DisplayName>Clear B2C SSO Session</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <PersistedClaims RemoveAll="true" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectIdFromSession" DefaultValue="false" /> </OutputClaims> </TechnicalProfile>
该配置会直接移除当前会话中所有持久化存储的声明,包括你提到的旧objectId,同时终止当前B2C会话。
方案2:正确配置invalidateAllRefreshTokens实现全端令牌失效
此前很多用户反馈该配置不生效,核心原因是只做了策略侧配置,没有配合调用Graph API完成后端刷新令牌失效,完整步骤如下:
- 在删账策略的输出声明中添加配置:
<OutputClaim ClaimTypeReferenceId="invalidateAllRefreshTokens" DefaultValue="true" /> - 在删除用户的技术配置文件中,同步调用Microsoft Graph的
invalidateAllRefreshTokens接口,对目标用户的所有历史刷新令牌做失效处理,后端令牌失效后即使用户持有旧会话也无法正常获取新的访问凭证。
方案3:重定向登出端点做兜底清理
删账流程执行完成后,不要直接返回应用,而是将用户重定向到B2C租户的登出端点,该操作会同时清除B2C侧的SSO会话cookie,以及所有关联信任应用的会话状态。
额外兼容处理
针对所有已上线的自定义策略,在读取objectIdFromSession声明后新增一步用户有效性校验:读取目录中该objectId对应的用户状态,如果返回用户不存在,直接触发会话清除逻辑并跳转登录页,避免残留的会话声明导致逻辑异常。
内容的提问来源于stack exchange,提问作者NigelW61
相关产品推荐
相关产品推荐

