【问题标题】:DisplayControl - Verify email not used - Azure AD B2CDisplayControl - 验证电子邮件未使用 - Azure AD B2C
【发布时间】:2021-02-12 22:26:02
【问题描述】:

在我们的注册自定义政策中发送验证码之前,我收到了一个验证电子邮件是否未被使用的请求。 在我们的密码重置政策中,我们使用 DisplayControl 在发送 OTP 代码之前检查密码是否存在,并且仅在电子邮件已注册时才发送 OTP。但是,我需要在注册过程中做相反的事情,只有在电子邮件尚未注册时才发送代码。

我尝试使用以下内容:

      <DisplayControl Id="emailVerificationControlSignUp" UserInterfaceControlType="VerificationControl">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="emailAddress" />
    </InputClaims>
    <DisplayClaims>
      <DisplayClaim ClaimTypeReferenceId="emailAddress" ControlClaimType="Email" Required="true" />
      <DisplayClaim ClaimTypeReferenceId="verificationCode" ControlClaimType="VerificationCode" Required="true" />
    </DisplayClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="azureMfaSessionId" />
    </OutputClaims>
    <Actions>
      <!--Before generating and sending an OTP, we first take the users email and lookup the directory for a user. If a user is returned we will have the objectId claim in the claimbag-->
      <Action Id="SendCode">
        <ValidationClaimsExchange>
          <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="AAD-UserReadUsingEmailAddress-emailAdressExist" ContinueOnError="true" ContinueOnSuccess="false" />
          <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="AadSspr-SendCode">
            <Preconditions>
              <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                <Value>objectId</Value>
                <Action>SkipThisValidationTechnicalProfile</Action>
              </Precondition>
            </Preconditions>
          </ValidationClaimsExchangeTechnicalProfile>
        </ValidationClaimsExchange>
      </Action>
      <Action Id="VerifyCode">
        <ValidationClaimsExchange>
          <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="AadSspr-VerifyCode" />
        </ValidationClaimsExchange>
      </Action>
    </Actions>
  </DisplayControl>

还有这份技术简介

<TechnicalProfile Id="AAD-UserReadUsingEmailAddress-emailAdressExist">
      <Metadata>
        <Item Key="Operation">Read</Item>
        <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
        <!--<Item Key="UserMessageIfClaimsPrincipalDoesNotExist">UserMessageIfClaimsPrincipalDoesNotExist</Item>
        <Item Key="UserMessageIfClaimsPrincipalAlreadyExists">UserMessageIfClaimsPrincipalAlreadyExists</Item>-->
      </Metadata>
      <IncludeInSso>false</IncludeInSso>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="emailAddress" PartnerClaimType="signInNames.emailAddress" Required="true" />
      </InputClaims>
      <OutputClaims>
        <!-- Required claims -->
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
        <!-- Optional claims -->
        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="otherMails" />
        <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
      </OutputClaims>
      <IncludeTechnicalProfile ReferenceId="AAD-Common" />
    </TechnicalProfile>

实际情况是,只有在电子邮件尚未注册时才会发送 OTP,但是,即使电子邮件已注册,DisplayControl 也会始终更改为显示“验证代码/发送新代码”按钮。所以,最后,如果电子邮件已经注册,用户不会得到 OTP,只有在电子邮件没有注册的情况下。但是,屏幕上并没有告诉用户这一点。

电子邮件已注册,用户应该看到错误消息,而不是验证/发送新代码按钮

如何修复这个 DisplayControl?

谢谢

【问题讨论】:

    标签: azure-active-directory azure-ad-b2c azure-ad-b2c-custom-policy


    【解决方案1】:

    感谢您与我们联系。从上面共享的 DisplayControl 元素中,我可以看到用户已经从这一行做好了准备:

    <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="AAD-UserReadUsingEmailAddress-emailAdressExist" ContinueOnError="true" ContinueOnSuccess="false" />
    

    用户被读取后,检查objectid是否存在->调用claimTransform

    注意:不推荐使用此方法,因为它可用于收集电子邮件。在所有情况下发送电子邮件以进行注册的推荐方法。

    【讨论】:

    • 您好!我已经尝试过这种方法,但无论我如何尝试改变它,我仍然会遇到相同或类似的问题。拜托,你能提供一些关于如何实现它的进一步解释吗?我阅读了 MS 网站上的文档,但不是很有帮助。
    猜你喜欢
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多