Azure AD B2C Сброс пароля Пользовательская политика с экраном подтверждения

Я настроил настраиваемую политику входа в Azure AD B2C, чтобы настроить динамическое содержимое графического интерфейса пользователя во время входа в систему и настроить брендинг на основе определенных сценариев. Эта политика входа отображает "Забыли пароль?" ссылка, которая обрабатывается моим приложением, чтобы инициировать поток для другой пользовательской политики сброса пароля.

В стандартных политиках сброса пароля, предоставляемых B2C, после сброса пароля пользователем появляется дополнительный экран, показывающий, что пароль был успешно изменен, и предоставляется ссылка для повторного выполнения политики входа. При использовании пользовательской политики URL-адрес перенаправления вызывается сразу после сброса пароля.

Можно ли настроить дополнительный шаг в потоке политики сброса пароля с помощью экрана с сообщением подтверждения?

0 ответов

Я тоже боролся с этим несколько дней. Мне удалось заставить его работать, добавив следующее в файл Extensions.

  1. Добавьте шаг 3 к существующим шагам OrchestrationSteps для PasswordReset UserJourney
       <UserJourney Id="PasswordReset">
  <OrchestrationSteps>
    <OrchestrationStep Order="1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="3" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="ShowSuccess" TechnicalProfileReferenceId="LocalAccountWritePasswordChanged" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="4" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
  </OrchestrationSteps>
  <ClientDefinition ReferenceId="DefaultWeb" />
</UserJourney>

  1. Добавьте этот ClaimType в BuildingBlocks/ClaimsSchema
         <ClaimType Id="justResetPassword">
    <DisplayName>justResetPassword</DisplayName>
    <DataType>boolean</DataType>
    <UserHelpText>Indicates whether the user just reset their password via the forgot password feature.</UserHelpText>
    <UserInputType>Button</UserInputType>
  </ClaimType>

  1. Добавьте указанный выше новый TechnicalProfile: LocalAccountWritePasswordChanged
           <TechnicalProfile Id="LocalAccountWritePasswordChanged">
      <DisplayName>Changed password</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.passwordchangesuccess</Item>
        <Item Key="language.button_continue">Back to Login</Item>
        <Item Key="language.initial_intro">Ready to login again...</Item>
        <Item Key="language.verifying_blurb">Preparing login screen.</Item>
        <!-- TODO: Hide cancel button -->
      </Metadata>
      <CryptographicKeys>
        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
      </CryptographicKeys>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="objectId" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="justResetPassword" DefaultValue="true" />
      </OutputClaims>
    </TechnicalProfile>

  1. Измените файл проверяющей стороны, чтобы он также имел outputClaim нового типа justResetPassword
       <OutputClaim ClaimTypeReferenceId="justResetPassword" />

Я думаю, что уловка в том, что этот новый технический профиль имеет выходное требование justResetPassword, поэтому он срабатывает, чтобы попытаться захватить это значение. Поскольку это тип данных, кнопка, хотя она не отображается. Я не очень разбираюсь в этом вопросе, но поскольку он работает, и мне потребовалось столько времени, чтобы добраться сюда, я не собираюсь подвергать его слишком большому сомнению.

Вы можете заметить, что этот новый технический профиль ссылается на ContentDefinition из api.passwordchangesuccess. Это настраиваемое определение содержимого, которое я создал сам, чтобы обеспечить более приятный настраиваемый заголовок для "Сообщение для сброса пароля". Вместо этого вы можете использовать ContentDefinition api.selfasserted, если вам не нужно слишком много настраивать страницу успеха.

Конечный результат после сброса пароля:Скриншот

Другие вопросы по тегам