Как создать страницу только для электронной почты в Azure AD B2C?

#azure #azure-active-directory #azure-ad-b2c

#azure #azure-active-directory #azure-ad-b2c

Вопрос:

Я хотел бы иметь страницу перед моей страницей входа, где есть только поле адреса электронной почты и кнопка. Как только пользователь нажимает кнопку, он переходит на другую страницу, где он может ввести свое имя пользователя и пароль и выполнить вход. Возможно ли это в B2C?

Страница только для электронной почты:

введите описание изображения здесь

Страница входа:

введите описание изображения здесь

Шаг 1. В TrustFrameworkBase.xml файл, добавьте ограничение ввода к типу утверждения signInName, чтобы на первой странице можно было ввести только адрес электронной почты.

 <!-- Claims needed for local accounts. -->
      <!--<ClaimType Id="signInName">
        <DisplayName>Sign in name</DisplayName>
          <DisplayName>Email address</DisplayName>
        <DataType>string</DataType>
        <UserHelpText />
        <UserInputType>TextBox</UserInputType>
      </ClaimType>-->

        <ClaimType Id="signInName">
            <DisplayName>Email address</DisplayName>
            <DataType>string</DataType>
            <UserHelpText/>
            <UserInputType>TextBox</UserInputType>
            <Restriction>
                <Pattern RegularExpression="^[a-zA-Z0-9.!#$%amp;amp;'^_`{}~-] @[a-zA-Z0-9-] (?:.[a-zA-Z0-9-] )*$" HelpText="Please enter a valid email address." />
            </Restriction>
        </ClaimType>
  

Шаг 2. В TrustFrameworkBase.xml файл, добавьте другой технический профиль к поставщику претензий локальной учетной записи, который запрашивает адрес электронной почты.

  <ClaimsProvider>
      <DisplayName>Local Account</DisplayName>
      <TechnicalProfiles>
          <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-EmailOnly">
              <DisplayName>Local Account Signin</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.selfasserted</Item>
              </Metadata>
              <IncludeInSso>false</IncludeInSso>
              <OutputClaims>
                  <OutputClaim ClaimTypeReferenceId="signInName" Required="true" />
              </OutputClaims>
              <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
          </TechnicalProfile>
        <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
...
  

Шаг 3. В TrustFrameworkBase.xml файл, добавьте SelfAsserted-LocalAccountSignin-EmailOnly в путешествие пользователя SignUpOrSignIn в качестве первого шага оркестровки.

 <UserJourneys>
    <UserJourney Id="SignUpOrSignIn">
      <OrchestrationSteps>
          <OrchestrationStep Order="1" Type="ClaimsExchange">
              <ClaimsExchanges>
                  <ClaimsExchange Id="LocalAccountSigninEmailOnlyExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-EmailOnly" />
              </ClaimsExchanges>
          </OrchestrationStep>
        <OrchestrationStep Order="2" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
          <ClaimsProviderSelections>
            <ClaimsProviderSelection TargetClaimsExchangeId="FacebookExchange" />
            <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
          </ClaimsProviderSelections>
          <ClaimsExchanges>
            <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
          </ClaimsExchanges>
        </OrchestrationStep>
  

Мне все еще предлагается ввести пароль (CSS скрывает поле):

введите описание изображения здесь

Ответ №1:

Пользовательская политика может быть реализована для этого «разбитого на страницы» входа с использованием начального пакета LocalAccounts следующим образом.

  1. В TrustFrameworkBase.xml файл, добавьте ограничение ввода к типу утверждения signInName, чтобы на первой странице можно было ввести только адрес электронной почты.
 <ClaimType Id="signInName">
  <DisplayName>Email address</DisplayName>
  <DataType>string</DataType>
  <UserHelpText/>
  <UserInputType>TextBox</UserInputType>
  <Restriction>
    <Pattern RegularExpression="^[a-zA-Z0-9.!#$%amp;amp;'^_`{}~-] @[a-zA-Z0-9-] (?:.[a-zA-Z0-9-] )*$" HelpText="Please enter a valid email address." />
  </Restriction>
</ClaimType>
  
  1. В TrustFrameworkBase.xml файл, добавьте другой технический профиль к поставщику претензий локальной учетной записи, который запрашивает адрес электронной почты.
 <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-EmailOnly">
  <DisplayName>Local Account Signin</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.selfasserted</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="signInName" Required="true" />
  </OutputClaims>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>
  
  1. В TrustFrameworkBase.xml файл, добавьте SelfAsserted-LocalAccountSignin-EmailOnly в путешествие пользователя SignUpOrSignIn в качестве первого шага оркестровки.
 <UserJourney Id="SignUpOrSignIn">
  <OrchestrationSteps>
    <OrchestrationStep Order="1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="LocalAccountSigninEmailOnlyExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-EmailOnly" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="2" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
      <ClaimsProviderSelections>
        <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
      </ClaimsProviderSelections>
      <ClaimsExchanges>
        <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
      </ClaimsExchanges>
    </OrchestrationStep>
    ...
  

Комментарии:

1. Я обновил свой вопрос, чтобы отразить решение Криса.

2. Ваше решение сработало. Я допустил ошибку в своем файле расширений.