Заполните текстовое поле адреса электронной почты в Azure AD B2C Orchestration - PullRequest
0 голосов
/ 10 января 2019

Я использую пользовательские политики для некоторых поездок пользователей и использую SocialAndLocalAccountsWithMfa . На одном из этапов я прошу пользователя указать его адрес электронной почты

Я использую «LocalAccountDiscoveryUsingEmailAddress», чтобы получить их адрес электронной почты на первом экране. И затем в зависимости от того, зарегистрированы ли они для MFA, они отправляются на экран OTP Mobile или на экран OTP почтового адреса.

Теперь происходит то, что после того, как они введут свой адрес электронной почты и нажмут ok (и они отправлены на экран emial OTP), им снова будет представлен другой экран, чтобы снова ввести свой адрес электронной почты для проверки. Я ищу два варианта здесь

1) (Предпочитается) Им немедленно отправляется OTP по электронной почте, поэтому им не нужно вводить свой адрес электронной почты, а затем нажимать «проверить emial» для отправки OTP

Или

2) Их адрес электронной почты уже указан на экране, поэтому им не нужно вводить его снова и, следовательно, все, что им нужно сделать, - это нажать кнопку «Подтвердить адрес электронной почты».

Мой Userjourney для этого выглядит примерно так:

   <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>

1 Ответ

0 голосов
/ 10 января 2019

Во-первых, для # 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 вы можете реализовать вышеуказанные изменения, а также реализовать функцию JavaScript в пользовательском интерфейсе пользовательской страницы, чтобы «нажать» кнопку Подтвердить адрес электронной почты , чтобы инициировать проверку OTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...