azure - 填充 Azure AD B2C Orchestration 中的电子邮件地址文本框

标签 azure azure-ad-b2c

我正在使用自定义策略来执行一些用户旅程并使用 SocialAndLocalAccountsWithMfa 。在其中一个步骤中,我要求用户提供他们的电子邮件地址

我正在使用“LocalAccountDiscoveryUsingEmailAddress”在第一个屏幕上获取他们的电子邮件地址。然后,根据他们是否注册了 MFA,他们将被发送到移动 OTP 屏幕或发送到邮件地址 OTP 屏幕。

现在发生的情况是,在他们输入电子邮件地址并按确定(并且他们被发送到 emial OTP 屏幕)后,他们会再次出现另一个屏幕,以再次输入他们的电子邮件地址以进行验证。我在这里寻找两种可能性

1) (首选)他们会立即收到一封电子邮件 OTP - 因此他们无需输入电子邮件地址,然后单击“验证 emial”即可发送 OTP

或者

2) 他们的电子邮件地址已填充在屏幕中,因此他们无需再次输入,因此他们所要做的就是单击“验证电子邮件”按钮。

我的用户旅程看起来像这样

   <UserJourney Id="PasswordReset">
      <OrchestrationSteps>
        <OrchestrationStep Order="1" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="PasswordResetUsingEmailAddress" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" />
          </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="2" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
              <Value>strongAuthenticationPhoneNumber</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>           
          </Preconditions>  
          <ClaimsExchanges>
            <ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddressOTP" />
          </ClaimsExchanges>
        </OrchestrationStep>        
        <OrchestrationStep Order="3" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
              <Value>strongAuthenticationPhoneNumber</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>           
          </Preconditions>  
          <ClaimsExchanges>
            <ClaimsExchange Id="PhoneFactor-Verify" TechnicalProfileReferenceId="PhoneFactor-InputOrVerify" />
          </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="4" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" />
          </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="5" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
      </OrchestrationSteps>
      <ClientDefinition ReferenceId="DefaultWeb" />
    </UserJourney>

最佳答案

首先,对于#2,您可以实现一个技术配置文件,该配置文件接受电子邮件地址作为输入声明,以便将其预先填充在自声明页面中,例如:

<TechnicalProfile Id="SelfAsserted-LocalAccount-EmailVerification">
  <DisplayName>Local Account Email Address Verification</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.localaccount.emailverification</Item>
    <Item Key="EnforceEmailVerification">true</Item>
  </Metadata>
  <InputClaimsTransformations>
    <InputClaimsTransformation ReferenceId="CreateReadonlyEmailClaim" />
  </InputClaimsTransformations>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="readonlyEmail" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="readonlyEmail" PartnerClaimType="verified.email" Required="true" />
  </OutputClaims>
</TechnicalProfile>

此技术配置文件指的是只读电子邮件地址,因此最终用户无法更改用于 OTP 验证的电子邮件地址。

CreateReadonlyEmailClaim 声明转换定义为:

<ClaimsTransformation Id="CreateReadonlyEmailClaim" TransformationMethod="FormatStringClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormat" DataType="string" Value="{0}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="readonlyEmail" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

readonlyEmail 声明类型声明为:

<ClaimType Id="readonlyEmail">
  <DisplayName>E-mail Address</DisplayName>
  <DataType>string</DataType>
  <UserInputType>Readonly</UserInputType>
</ClaimType>

对于#1,您可以实现上述更改,并在自定义页面 UI 中实现 JavaScript 函数,以“单击”验证电子邮件按钮来启动 OTP 验证。

关于azure - 填充 Azure AD B2C Orchestration 中的电子邮件地址文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118940/

相关文章:

azure - 设置应用程序的已验证发布者 (Azure AD B2C),以便其在用户同意提示中显示为已验证

microsoft-graph-api - 微软图休息API测试版: application created by api in azure ad b2c is not valid

javascript - 有没有办法使用 @azure/msal-angular 登录用户 azure 订阅 ID?

node.js - 将 AJAX 响应(图像 blob)上传到 Azure Blob 存储 : Error 414

azure - Aks SecretProviderClass 未找到 secret

azure - Azure B2C 用户流中缺少电子邮件声明

python - Azure 检测流无效请求

azure - 获取不带路径的分支名称并设置为变量

Azure Active Directory B2C 显示同一租户的两个不同位置

azure-ad-b2c - Azure AD B2C 自助服务密码重置链接不起作用