#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 следующим образом.
- В 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>
- В 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>
- В 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. Ваше решение сработало. Я допустил ошибку в своем файле расширений.