Настройте страницу регистрации с помощью api.signuporsignin и пользовательских политик.

Я использую api.signuporsignin в своем путешествии и настроил страницу входа, но когда я нажимаю на ссылку регистрации, она переходит на страницу регистрации MS по умолчанию вместо пользовательской регистрации. Я видел, что эта ссылка ведет на

https://tenant.b2clogin.com/tenant.onmicrosoft.com/B2C_1A_signup_signin/api/CombinedSigninAndSignup/unified?local=signup...

Есть ли способ настроить страницу регистрации с помощью api.signuporsignin?

вот мое путешествие

<UserJourney Id="SignUpWithEmailOrSignInWithUsernameOrEmail">
            <OrchestrationSteps>
                <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
                    <ClaimsProviderSelections>
                        <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninUsernameExchange" />
                    </ClaimsProviderSelections>
                    <ClaimsExchanges>
                        <ClaimsExchange Id="LocalAccountSigninUsernameExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Username" />
                    </ClaimsExchanges>
                </OrchestrationStep>
                <OrchestrationStep Order="2" Type="ClaimsExchange">
                <Preconditions>
                    <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                    <Value>objectId</Value>
                    <Action>SkipThisOrchestrationStep</Action>
                    </Precondition>
                </Preconditions>
                <ClaimsExchanges>
                    <ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" />
                </ClaimsExchanges>
            </OrchestrationStep>

...

<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Username">
                <DisplayName>Local Account Signin with Username</DisplayName>
                <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
                <Metadata>
                    <Item Key="SignUpTarget">SignUpWithLogonUsernameExchange</Item>
                    <Item Key="setting.operatingMode">Username</Item>
                    <Item Key="ContentDefinitionReferenceId">api.selfasserted.test</Item>
                </Metadata>

спасибо

РЕДАКТИРОВАТЬ 1: Добавить определение контента. Я мог бы настроить страницу входа, но не зарегистрироваться. Когда вы нажимаете на ссылку зарегистрироваться сейчас, появляется страница MS по умолчанию.

<ContentDefinitions>
        <ContentDefinition Id="api.signuporsignin">
            <LoadUri>https://something.blob.core.windows.net/mycontainer/custom-ui.html</LoadUri>
            <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
            <DataUri>urn:com:microsoft:aad:b2c:elements:unifiedssp:1.0.0</DataUri>
            <Metadata>
                <Item Key="DisplayName">Signin and Signup</Item>
            </Metadata>
        </ContentDefinition>
        <ContentDefinition Id="api.selfasserted.test">
            <LoadUri>https://something.blob.core.windows.net/mycontainer/custom-signup.html</LoadUri>
            <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
        <DataUri>urn:com:microsoft:aad:b2c:elements:selfasserted:1.1.0</DataUri>
            <Metadata>
            <Item Key="DisplayName">Collect information from user page</Item>
            </Metadata>
      </ContentDefinition>
    </ContentDefinitions>

person gllambi    schedule 29.12.2020    source источник
comment
Вы установили атрибут LoadUri элемента api.signuporsignin ContentDefinition? Как было предложено в этом ответе .   -  person Allen Wu    schedule 29.12.2020
comment
да. страница входа с новым макетом, но не регистрация. Я добавил свои определения содержания   -  person gllambi    schedule 29.12.2020
comment
Здравствуйте, gllambi! Я считаю, что проблема, с которой вы столкнулись, связана с определением контента, которое используется в техническом профиле регистрации. Не могли бы вы опубликовать код профиля регистрации и код для соответствующего определения контента?   -  person Christopher Norris    schedule 30.12.2020


Ответы (2)


Взгляните на базовые определения вашей системы доверия и (неопубликованные) остальную часть пути пользователя.

Страница регистрации или входа предоставляет только ссылки на страницу регистрации, которая работает, в основном пропуская этап оркестровки. Второй этап оркестрации после страницы регистрации или входа обычно проверяет, существует ли утверждение идентификатора объекта пользователя (IE — действительно ли пользователь вошел в систему или нет), а затем запускает этап регистрации с отдельным определением контента, если пользователь пытается зарегистрироваться и не войти...

Например, в базовых политиках, предоставляемых MS:

<UserJourney Id="SignUpOrSignIn">
      <OrchestrationSteps>
      
        <!-- Present the sign up or sign in page, with `api.signuporsignin` -->
        <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
          <ClaimsProviderSelections>
            <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
          </ClaimsProviderSelections>
          <ClaimsExchanges>
            <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
          </ClaimsExchanges>
        </OrchestrationStep>

        <!-- 
            If the previous step did not generate a user object ID (IE - 
            sign the user in), show the sign up page.
 
            The `LocalAccountSignUpWithLogonEmail` technical profile 
            should use a diffrent content definion because it's a self-assert
            profile - in this case `api.localaccountsignup` - You'll need to
            customize this content definition too.
         -->
        <OrchestrationStep Order="2" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
              <Value>objectId</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <ClaimsExchanges>
            <ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" />
          </ClaimsExchanges>
        </OrchestrationStep>
...
person iris-HP    schedule 30.12.2020
comment
Привет большое спасибо! Я использовал технический профиль LocalAccountSignUpWithLogonEmail. Обновлено определение содержимого api.localaccountsignup, и оно заработало! - person gllambi; 30.12.2020

Как предложил @Allen Wu, выполните поиск 'api.signuporsignin' в TrustFrameworkExtensions.xml, проверьте, < em>Loaduri соответствует URL-адресу, который вы указали в своей учетной записи Azure AD protal-›storge-›container.

  <ContentDefinition Id="api.signuporsignin">
    <LoadUri>https://storage1.blob.core.windows.net/root/custom-ui.html</LoadUri>
    <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
    <DataUri>urn:com:microsoft:aad:b2c:elements:unifiedssp:1.0.0</DataUri>
    <Metadata>
      <Item Key="DisplayName">Signin and Signup</Item>
    </Metadata>
    <LocalizedResourcesReferences MergeBehavior="Prepend">
      <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.signuporsignin.en" />
      <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.signuporsignin.es" />
    </LocalizedResourcesReferences>
  </ContentDefinition>
person Chauncy Zhou    schedule 29.12.2020
comment
да, я добавил определение контента, которое использую в посте - person gllambi; 29.12.2020