程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了DisplayControl - 验证未使用的电子邮件 - Azure AD B2C大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决DisplayControl - 验证未使用的电子邮件 - Azure AD B2C?

开发过程中遇到DisplayControl - 验证未使用的电子邮件 - Azure AD B2C的问题如何解决?下面主要结合日常开发的经验,给出你关于DisplayControl - 验证未使用的电子邮件 - Azure AD B2C的解决方法建议,希望对你解决DisplayControl - 验证未使用的电子邮件 - Azure AD B2C有所启发或帮助;

在我们的注册自定义政策中发送验证码之前,我收到了一个请求,要求验证电子邮件未被使用。 在我们的密码重置策略中,我们使用 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="authentication@R_489_9016@e" 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 AD B2C

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

如何修复此 displayControl?

谢谢

解决方法

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

<ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferencEID="AAD-UserReadUsingEmailAddress-emailadressExist" ConTinueOnError="true" ConTinueOnsuccess="false" />

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

  • ClaimTransform 将 objectid 声明与一些虚拟值进行比较
  • 它将发出布尔值 (true) 或错误
  • 因为只有在 objectId 存在时才会调用它,所以它总是会抛出错误 https://docs.microsoft.com/en-us/azure/active-directory-b2c/String-transformations#assertStringclaimsareequal
  • 如果 objectid 不存在,则继续发送代码 AadSspr-SendCode

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

大佬总结

以上是大佬教程为你收集整理的DisplayControl - 验证未使用的电子邮件 - Azure AD B2C全部内容,希望文章能够帮你解决DisplayControl - 验证未使用的电子邮件 - Azure AD B2C所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:-