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

Azure B2C自定义策略:用户不在目录中时如何自动跳转至注册页?

基于Azure B2C自定义策略的按需用户验证与注册跳转实现

核心逻辑

无需批量同步用户数据,在用户登录流程中加入B2C目录用户存在性检查,若用户未注册则自动引导至注册环节,基于入门包自定义策略即可实现。

具体配置步骤

1. 添加用户存在性检查技术配置

在TrustFrameworkExtensions.xml中新增技术配置,调用B2C内置的用户读取端点验证用户是否存在:

<TechnicalProfile Id="AAD-UserExistsCheck">
  <Metadata>
    <Item Key="Operation">Read</Item>
    <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
    <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">该用户未注册,请完成注册</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectId" />
  </OutputClaims>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

2. 修改用户旅程,添加分支逻辑

在用户旅程的登录步骤后,新增验证与跳转分支:

<UserJourney Id="SignInOrSignUp">
  <OrchestrationSteps>
    <!-- 原有登录页面展示步骤 -->
    <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
      <ClaimsProviderSelections>
        <ClaimsProviderSelection TargetClaimsExchangeId="LocalAccountSigninEmailExchange" />
      </ClaimsProviderSelections>
      <ClaimsExchanges>
        <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
      </ClaimsExchanges>
    </OrchestrationStep>

    <!-- 新增:检查用户是否存在于B2C目录 -->
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
          <Value>objectId</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <ClaimsExchanges>
        <ClaimsExchange Id="AADUserExistsCheckExchange" TechnicalProfileReferenceId="AAD-UserExistsCheck" />
      </ClaimsExchanges>
    </OrchestrationStep>

    <!-- 新增:用户不存在时跳转至注册流程 -->
    <OrchestrationStep Order="3" Type="ClaimsExchange">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
          <Value>objectId</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <ClaimsExchanges>
        <ClaimsExchange Id="LocalAccountSignUpExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" />
      </ClaimsExchanges>
    </OrchestrationStep>

    <!-- 保留原有后续流程步骤(如信息收集、令牌颁发等) -->
    <OrchestrationStep Order="4" Type="ClaimsExchange">
      <!-- 原有配置内容 -->
    </OrchestrationStep>
  </OrchestrationSteps>
</UserJourney>

3. 可选:自定义错误提示

可修改AAD-UserExistsCheck中的UserMessageIfClaimsPrincipalDoesNotExist值,或通过UI自定义调整提示样式,优化用户体验。

关键注意点

  • 依赖入门包中已有的AAD-Common技术配置,确保其正常引用以实现B2C目录交互
  • 测试时使用未在B2C注册的邮箱登录,验证是否自动触发注册流程
  • 全程无需调用Graph API批量同步用户数据,完全基于登录时的按需验证实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:27:17