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

Azure AD B2C自定义策略SSO配置失败:跨标签页需重复登录

Azure AD B2C自定义策略SSO配置问题修复方案

核心问题分析

你的配置存在两处关键错误,导致SSO会话无法跨标签页维持:

  1. 错误引入用于OAuth UserInfo授权的Authorization节点,干扰了B2C自身的SSO会话检查流程
  2. 冗余的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-sso Cookie的Domain属性是否为.b2clogin.com(租户级共享),且SameSite属性为Lax或None(避免跨标签页被阻止)
  • 确认SessionExpiryInSeconds和KeepAliveInDays的配置符合业务需求,当前1800秒(30分钟)的会话有效期合理,但需排查是否有其他策略覆盖该配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:15:56