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

Azure B2C:如何在统一登录页按邮箱自动路由本地/Entra账号登录

解决方案:Azure B2C自动路由本地/Entra账号登录

针对你遇到的用户误将Entra账号凭证输入本地账号框导致报错的问题,以下是可行的实现方案,无需额外页面,直接在原有统一登录流程中完成自动路由:


1. 构建邮箱关联账号查询的技术配置文件

创建一个基于Azure AD的技术配置文件,同时查询本地账号(signInNames.emailAddress)和社交账号(emails)的邮箱关联信息,获取用户的身份提供商标识:

<ClaimsProvider>
  <DisplayName>Azure Active Directory</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="AAD-UserReadByEmail">
      <Metadata>
        <Item Key="Operation">Read</Item>
        <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">false</Item>
        <Item Key="UserMessageIfClaimsPrincipalDoesNotExist"></Item>
      </Metadata>
      <IncludeInSso>false</IncludeInSso>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="email" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="identityProvider" />
      </OutputClaims>
      <IncludeTechnicalProfile ReferenceId="AAD-Common" />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

该配置通过email作为匹配字段,同时覆盖本地账号和社交账号的邮箱存储位置,返回用户的identityProvider字段(Entra账号的标识通常为https://login.microsoftonline.com/[你的租户ID]/v2.0)。


2. 修改本地账号登录的自断言技术配置文件

调整SelfAsserted-LocalAccountSignin-Email,添加前置验证逻辑:先查询用户身份,若为Entra账号则自动跳转至Entra登录流程,否则继续本地账号密码验证:

<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
  <DisplayName>Local Account Signin</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
    <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">Invalid credentials</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="signInName" Required="true" />
    <OutputClaim ClaimTypeReferenceId="password" Required="true" />
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <!-- 前置查询用户身份信息 -->
    <ValidationTechnicalProfile ReferenceId="AAD-UserReadByEmail">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
          <Value>identityProvider</Value>
          <Action>SkipThisValidationTechnicalProfile</Action>
        </Precondition>
      </Preconditions>
    </ValidationTechnicalProfile>
    <!-- 若为Entra账号,跳转至Entra登录 -->
    <ValidationTechnicalProfile ReferenceId="AADCommon-OpenIdConnect">
      <Preconditions>
        <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
          <Value>identityProvider</Value>
          <Value>https://login.microsoftonline.com/[你的租户ID]/v2.0</Value>
          <Action>SkipThisValidationTechnicalProfile</Action>
        </Precondition>
      </Preconditions>
    </ValidationTechnicalProfile>
    <!-- 本地账号则继续密码验证 -->
    <ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
  </ValidationTechnicalProfiles>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

注意替换[你的租户ID]为实际的Entra租户ID,可通过B2C用户列表中社交账号的「标识提供者」字段获取。


3. 保留原有编排步骤

无需修改原有的CombinedSignInAndSignUp编排步骤,确保LocalAccountSigninEmailExchange指向修改后的SelfAsserted-LocalAccountSignin-Email即可:

<OrchestrationStep Order="2" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
    <ClaimsProviderSelection TargetClaimsExchangeId="AzureADCommonExchange" />
    <ClaimsProviderSelection TargetClaimsExchangeId="ForgotPasswordExchange" />
  </ClaimsProviderSelections>
  <ClaimsExchanges>
    <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
  </ClaimsExchanges>
</OrchestrationStep>

方案效果

用户在统一登录页的本地账号框输入邮箱和密码后:

  • 若邮箱关联的是Entra社交账号,系统自动跳转至Entra登录页面,引导用户用正确方式登录
  • 若为本地账号,正常验证密码完成登录
  • 完全保留原有统一登录页的用户体验,无需额外步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:51:10