Azure AD B2C自定义策略SSO配置失败:跨标签页需重复登录
Azure AD B2C自定义策略SSO配置问题修复方案
核心问题分析
你的配置存在两处关键错误,导致SSO会话无法跨标签页维持:
- 错误引入用于OAuth UserInfo授权的
Authorization节点,干扰了B2C自身的SSO会话检查流程 - 冗余的
UserInfoAuthorization技术配置完全不适用租户内SSO场景,且缺失正确的SSO会话验证步骤
具体修正步骤
1. 移除UserJourney中的Authorization节点
删除UserJourney下的整个Authorization区块,这部分用于OAuth 2.0 UserInfo端点授权,和B2C租户内SSO无关,会导致流程跳过SSO会话检查:
<!-- 删除以下内容 --> <Authorization> <AuthorizationTechnicalProfiles> <AuthorizationTechnicalProfile ReferenceId="UserInfoAuthorization" /> </AuthorizationTechnicalProfiles> </Authorization>
2. 删除无用的UserInfoAuthorization技术配置
直接移除整个UserInfoAuthorization技术配置节点,该配置不是实现租户SSO的必要组件:
<!-- 删除以下内容 --> <TechnicalProfile Id="UserInfoAuthorization"> <DisplayName>UserInfo authorization</DisplayName> <Protocol Name="None" /> <InputTokenFormat>JWT</InputTokenFormat> <Metadata> <Item Key="issuer">https://cbiab2cdev.b2clogin.com/042d9ae4-38a5-4443-9281-1234567890/v2.0/</Item> <Item Key="audience">[ "0bc2ac13-bx10-3e4b-976f-1234567890" ]</Item> <Item Key="client_assertion_type">urn:ietf:params:oauth:client-assertion-type:jwt-bearer</Item> </Metadata> <CryptographicKeys> <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/> </OutputClaims> </TechnicalProfile>
3. 添加SSO会话验证编排步骤
在OrchestrationSteps的第一个步骤(CombinedSignInAndSignUp)之前,新增用于检查SSO会话的步骤,若用户已有有效会话则直接跳过登录流程:
<OrchestrationStep Order="1" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="true"> <Value>objectId</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="SSOSessionCheck" TechnicalProfileReferenceId="SSOSessionVerification" /> </ClaimsExchanges> </OrchestrationStep>
同时添加对应的SSOSessionVerification技术配置,用于验证并读取SSO会话中的用户信息:
<TechnicalProfile Id="SSOSessionVerification"> <DisplayName>SSO Session Verification</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="IncludeSessionIndex">false</Item> <Item Key="SingleSignOnScope">Tenant</Item> </Metadata> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="email" /> <!-- 根据业务需求添加其他需从SSO会话读取的声明 --> </OutputClaims> </TechnicalProfile>
4. 确认CombinedSignInAndSignUp技术配置的SSO设置
确保你使用的登录技术配置(对应api.signinUsername内容定义的技术配置)中启用租户级SSO,可在其Metadata中添加:
<Metadata> <Item Key="SingleSignOnScope">Tenant</Item> </Metadata>
额外检查点
- 验证浏览器中
x-ms-cpim-ssoCookie的Domain属性是否为.b2clogin.com(租户级共享),且SameSite属性为Lax或None(避免跨标签页被阻止) - 确认
SessionExpiryInSeconds和KeepAliveInDays的配置符合业务需求,当前1800秒(30分钟)的会话有效期合理,但需排查是否有其他策略覆盖该配置
内容的提问来源于stack exchange,提问作者Sam Szeto
相关产品推荐
相关产品推荐

