Настройка потока сброса пароля в Azure Active Directory B2C

Для начала с помощью селектора Choose a policy type (Выбрать тип политики) выберите тип пользовательской политики. Azure Active Directory B2C предлагает два метода определения способа взаимодействия пользователей с вашими приложениями: с помощью предопределенных потоков пользователей или полностью настраиваемых пользовательских политик. Действия, которые необходимо выполнить, отличаются для каждого метода.

Путь взаимодействия пользователя для регистрации и входа позволяет пользователям сбрасывать пароль, используя ссылку Забыли пароль?. Поток самостоятельного сброса пароля применяется к локальным учетным записям в Azure Active Directory B2C (Azure AD B2C), которые используют адрес электронной почты или имя пользователя с паролем для входа.

Поток сброса пароля включает следующие шаги.

  1. На странице регистрации и входа пользователь выбирает ссылку Забыли пароль?. Azure AD B2C инициирует поток сброса пароля.
  2. В следующем появившемся диалоговом окне пользователь указывает свой адрес электронной почты и выбирает команду Отправить код проверки. Azure AD B2C отправляет код проверки в учетную запись электронной почты пользователя. Затем пользователь копирует код проверки из электронного письма, вводит код в диалоговом окне сброса пароля Azure AD B2C, а затем нажимает кнопку Проверить код.
  3. Затем пользователь может ввести новый пароль. (После проверки адреса электронной почты пользователь может нажать кнопку Изменить адрес электронной почты. См. раздел Как скрыть кнопку изменения адреса электронной почты.)

Diagram that shows three dialogs in the password reset flow.

Совет

Пользователь может изменить пароль с помощью процедуры самостоятельного сброса пароля, если он забыл свой пароль и вы хотите сбросить его. Вы также можете выбрать один из следующих вариантов потока пользователя:

  • Если пользователь знает пароль и хочет изменить его, используйте поток смены пароля.
  • Если требуется принудительно сбросить пароли пользователей (например, при первом входе в систему, когда пароли сброшены администратором, или после переноса в Azure AD B2C со случайными паролями), используйте поток принудительного сброса пароля.

Имя по умолчанию для кнопки Изменить адрес электронной почты на странице selfAsserted.html — changeclaims. Чтобы найти имя кнопки, на странице регистрации проверьте источник страницы с помощью средства браузера, такого как Проверка.

Необходимые компоненты

Как скрыть кнопку изменения адреса электронной почты

После подтверждения адреса электронной почты пользователь может изменить его. Для этого нужно выбрать параметр Изменить адрес электронной почты, ввести другой адрес электронной почты и снова пройти проверку адреса электронной почты. Если вы предпочитаете скрыть кнопку Изменить адрес электронной почты, можно изменить CSS, чтобы скрыть связанные элементы HTML в диалоговом окне. Например, можно добавить следующую запись CSS в selfAsserted.html и настроить пользовательский интерфейс с использованием HTML-шаблонов:

<style type="text/css">
   .changeClaims
   {
     visibility: hidden;
   }
</style>

Новый интерфейс сброса пароля теперь является частью политики регистрации или входа. Когда пользователь выбирает Забыли пароль?, он немедленно отправляется в процедуру забытого пароля. Приложению больше не требуется выполнять обработку кода ошибки AADB2C90118, и для сброса пароля не требуется отдельная политика.

Процедуру самостоятельного сброса пароля можно настроить для потоков пользователей "Вход" (рекомендуется) или "Регистрация и вход" (рекомендуется). Если вы не настроили один из этих потоков пользователей, создайте пользовательский поток регистрации или входа.

Чтобы настроить самостоятельный сброс пароля для пользовательского потока регистрации или входа:

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким клиентам, выберите значок Параметры в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню каталогов и подписок.
  3. В портале Azure найдите и выберите Azure AD B2C.
  4. Выберите Потоки пользователей.
  5. Выберите поток пользователей регистрации или входа (или введите Рекомендуемый), который требуется настроить.
  6. С меню в разделе Параметры выберите элемент Свойства.
  7. В разделе Конфигурация пароля выберите Самостоятельный сброс пароля.
  8. Выберите Сохранить.
  9. В меню слева в разделе Настройка выберите Макеты страниц.
  10. В списке Page Layout Version (Версия макета страницы) выберите 2.1.3 или более позднюю версию.
  11. Выберите Сохранить.

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

Совет

Полный пример политики регистрации или входа со сбросом пароля можно найти на сайте GitHub.

Чтобы указать политике, что пользователь выбрал ссылку Забыли пароль?, определите логическое утверждение. С помощью этого утверждения путь взаимодействия пользователя можно направить в технический профиль Забытый пароль. Кроме того, маркеру может быть выдано утверждение, чтобы приложение определило, что пользователь вошел с помощью потока пользователя "Забытый пароль".

Утверждения объявляются в схеме утверждений. Откройте файл расширения политики (например, по пути SocialAndLocalAccounts/TrustFrameworkExtensions.xml.).

  1. Найдите элемент BuildingBlocks. Если такой элемент не существует, добавьте его.

  2. Найдите элемент ClaimsSchema. Если такой элемент не существует, добавьте его.

  3. Добавьте следующее утверждение в элемент ClaimsSchema.

    <!-- 
    <BuildingBlocks>
      <ClaimsSchema> -->
        <ClaimType Id="isForgotPassword">
          <DisplayName>isForgotPassword</DisplayName>
          <DataType>boolean</DataType>
          <AdminHelpText>Whether the user has selected Forgot your Password</AdminHelpText>
        </ClaimType>
      <!--
      </ClaimsSchema>
    </BuildingBlocks> -->
    

Обновление версии макета страницы

Версия макета страницы 2.1.2 требуется для включения процесса самостоятельного сброса пароля на пути взаимодействия регистрации или входа. Обновление версии макета страницы:

  1. Откройте базовый файл политики, например SocialAndLocalAccounts/TrustFrameworkBase.xml.

  2. Найдите элемент BuildingBlocks. Если такой элемент не существует, добавьте его.

  3. Найдите элемент ContentDefinitions. Если такой элемент не существует, добавьте его.

  4. Измените элемент DataURI в элементе ContentDefinition с помощью идентификатора api.signuporsignin:

    <!-- 
    <BuildingBlocks>
      <ContentDefinitions> -->
        <ContentDefinition Id="api.signuporsignin">
          <DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.2</DataUri>
        </ContentDefinition>
      <!-- 
      </ContentDefinitions>
    </BuildingBlocks> -->
    

Добавление технических профилей

Доступ к утверждению isForgotPassword осуществляется с использованием технического профиля преобразования утверждений. Ссылка на технический профиль приводится далее. При вызове он устанавливает для утверждения isForgotPassword значение true.

  1. Откройте файл расширения политики (например, по пути SocialAndLocalAccounts/TrustFrameworkExtensions.xml.).
  2. Найдите элемент ClaimsProviders (если он не существует, создайте его), а затем добавьте следующего поставщика утверждений:
<!-- 
<ClaimsProviders> -->
  <ClaimsProvider>
    <DisplayName>Local Account</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="ForgotPassword">
        <DisplayName>Forgot your password?</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="isForgotPassword" DefaultValue="true" AlwaysUseDefaultValue="true"/>
        </OutputClaims>
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
      </TechnicalProfile>
      <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
        <Metadata>
          <Item Key="setting.forgotPasswordLinkOverride">ForgotPasswordExchange</Item>
        </Metadata>
      </TechnicalProfile>
      <TechnicalProfile Id="LocalAccountWritePasswordUsingObjectId">
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
<!-- 
</ClaimsProviders> -->

Параметр setting.forgotPasswordLinkOverride технического профиля SelfAsserted-LocalAccountSignin-Email определяет обмен утверждениями сброса пароля, который выполняется в пути взаимодействия пользователя.

Технический профиль LocalAccountWritePasswordUsingObjectId диспетчера сеансов UseTechnicalProfileForSessionManagementSM-AAD необходим пользователю, чтобы выполнять последующие входы в систему, если применяется единый вход.

Добавление подпути сброса пароля

Теперь пользователь может войти в систему, зарегистрироваться и выполнить сброс пароля в пути взаимодействия пользователя. Для лучшего упорядочения пути взаимодействия пользователя вы можете использовать подпуть для обработки потока сброса пароля.

Подпуть вызывается из пути взаимодействия пользователя и выполняет определенные действия, позволяющие пользователю сбросить пароль. Используйте тип Call подпути, чтобы после его завершения элемент управления возвращался на этап оркестрации, инициирующий подпуть.

  1. Откройте файл расширений политики, например SocialAndLocalAccounts/TrustFrameworkExtensions.xml.
  2. Найдите элемент SubJourneys. Если такой элемент не существует, добавьте его после элемента путей взаимодействия пользователя. Затем добавьте следующий подпуть:
<!--
<SubJourneys>-->
  <SubJourney Id="PasswordReset" Type="Call">
    <OrchestrationSteps>
      <!-- Validate user's email address. -->
      <OrchestrationStep Order="1" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- Collect and persist a new password. -->
      <OrchestrationStep Order="2" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" />
        </ClaimsExchanges>
      </OrchestrationStep>
    </OrchestrationSteps>
  </SubJourney>
<!--
</SubJourneys>-->

Подготовка пути взаимодействия пользователя

Затем, чтобы подключить пароль к подзаговорке "Забыл пароль", вам потребуется ссылаться на идентификатор вложенного пути "Забыл пароль" в элементе ClaimsProviderSelection шага CombinedSignInAndSignUp.

Если у вас нет собственного пути взаимодействия пользователя с шагом CombinedSignInAndSignUp, выполните следующие инструкции для дублирования существующего пути взаимодействия пользователя для регистрации или входа. В противном случае перейдите к следующему разделу.

  1. В начальном пакете откройте xml-файл TrustFrameworkBase.xml , например SocialAndLocalAccounts/TrustFrameworkBase.xml.
  2. Найдите и скопируйте все содержимое элемента UserJourney, в котором присутствует запись Id="SignUpOrSignIn".
  3. Файл Open TrustFrameworkExtensions.xml, например SocialAndLocalAccounts/TrustFrameworkExtensions.xml, и найдите элемент UserJourneys. Если элемент не существует, создайте его.
  4. Создайте дочерний элемент элемента UserJourneys, вставив все содержимое элемента UserJourney, скопированное на шаге 2.
  5. Переименуйте идентификатор пути взаимодействия пользователя. Например, Id="CustomSignUpSignIn".

В пути взаимодействия пользователя вы можете представить подпути "Забыли пароль" как ClaimsProviderSelection. Добавив этот элемент, вы подключаете пароль для забыли пароль? перейдите по ссылке forgot Password sub journey.

  1. Откройте xml-файл TrustFrameworkExtensions.xml, например SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  2. В пути взаимодействия пользователя найдите элемент шага оркестрации, включающий Type="CombinedSignInAndSignUp" или Type="ClaimsProviderSelection". Обычно это первый шаг оркестрации. Элемент ClaimsProviderSelections содержит список поставщиков удостоверений, которые пользователь может использовать для входа. Добавьте в него следующую строку.

    <ClaimsProviderSelection TargetClaimsExchangeId="ForgotPasswordExchange" />
    
  3. На следующем шаге оркестрации добавьте элемент ClaimsExchange , добавив следующую строку:

    <ClaimsExchange Id="ForgotPasswordExchange" TechnicalProfileReferenceId="ForgotPassword" />
    
  4. Добавьте следующий шаг оркестрации между текущим и следующим шагами. Новый добавляемый шаг оркестрации проверяет, существует ли утверждение isForgotPassword. Если утверждение существует, вызывается подпуть сброса пароля.

    <OrchestrationStep Order="3" Type="InvokeSubJourney">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>isForgotPassword</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <JourneyList>
        <Candidate SubJourneyReferenceId="PasswordReset" />
      </JourneyList>
    </OrchestrationStep>
    
  5. После добавления новых шагов оркестрации повторно последовательно пронумеруйте шаги, не пропуская ни одного целого числа от 1 до N.

Настройка выполнения пути взаимодействия пользователя

Теперь, после изменения или создания пути взаимодействия пользователя, в разделе Проверяющая сторона укажите путь, который Azure AD B2C будет выполнять для этой пользовательской политики.

  1. Откройте файл с элементом "Проверяющая сторона ", например SocialAndLocalAccounts/SignUpOrSignin.xml.

  2. В элементе RelyingParty найдите элемент DefaultUserJourney.

  3. Обновите ReferenceId DefaultUserJourney в соответствии с идентификатором пути взаимодействия пользователя, в который вы добавили ClaimsProviderSelections.

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

Указание потока "Забыли пароль" для приложения

Приложению может потребоваться определить, выполнил ли вход пользователь с использованием потока пользователя "Забыли пароль". Утверждение isForgotPassword содержит логическое значение, указывающее на то, что это сделано. Утверждение может быть выдано в токене, отправляемом в приложение. При необходимости добавьте isForgotPassword к выходным утверждениям в разделе Проверяющая сторона. Приложение может проверить утверждение isForgotPassword, чтобы определить, сбрасывает ли пользователь пароль.

<RelyingParty>
  <OutputClaims>
    ...
    <OutputClaim ClaimTypeReferenceId="isForgotPassword" DefaultValue="false" />
  </OutputClaims>
</RelyingParty>

Передача настраиваемой политики

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким клиентам, выберите значок Параметры в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню каталогов и подписок.
  3. В портале Azure найдите и выберите Azure AD B2C.
  4. В меню в разделе Политики выберите элемент Identity Experience Framework.
  5. Выберите Отправить настраиваемую политику. В следующем порядке отправьте измененные файлы политики:
    1. Базовый файл политики, например TrustFrameworkBase.xml.
    2. файл политики расширения, например TrustFrameworkExtensions.xml;
    3. файл политики проверяющей стороны, например SignUpSignIn.xml.

Проверка потока сброса пароля

  1. Выберите поток пользователя регистрации или входа (тип "Рекомендуемый"), который необходимо проверить.
  2. Выберите Выполнить поток пользователя.
  3. В разделе Приложение выберите зарегистрированное ранее веб-приложение с именем webapp1. В поле URL-адрес ответа должно содержаться значение https://jwt.ms.
  4. Выберите Выполнить поток пользователя.
  5. На странице регистрации или входа выберите Забыли пароль?.
  6. Проверьте адрес электронной почты для созданной ранее учетной записи и выберите команду Продолжить.
  7. В открывшемся диалоговом окне измените пароль для пользователя и выберите команду Продолжить. В https://jwt.ms возвращается токен, и браузер отображает его.
  8. Проверьте значение утверждения для токена возврата isForgotPassword. Если оно существует и имеет значение true, значит, пользователь сбрасывает пароль.

Политика сброса пароля (устаревшая)

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

Этот процесс показан на следующей схеме:

  1. В приложении пользователь выбирает элемент Вход. Приложение инициирует запрос авторизации и выполняет перенаправление в Azure AD B2C, чтобы пользователь мог завершить вход. В запросе авторизации указывается имя политики регистрации или входа, например B2C_1_signup_signin.

  2. Пользователь выбирает ссылку Забыли пароль?. Azure AD B2C возвращает код ошибки AADB2C90118 для приложения.

  3. Приложение обрабатывает код ошибки и инициирует новый запрос авторизации. В запросе авторизации указывается имя политики сброса пароля, например B2C_1_pwd_reset.

    Diagram that shows the legacy password reset user flow.

Вы видите базовый пример ASP.NET, демонстрирующий связь между потоками пользователей.

Создание потока пользователя сброса пароля

Чтобы пользователи приложения могли сбрасывать пароли, создается поток пользователя сброса паролей.

  1. На портале Azure перейдите к странице обзора арендатора Azure AD B2C.
  2. В меню слева в разделе Политики выберите элемент Потоки пользователей и щелкните команду Создать поток пользователя.
  3. На странице Создание потока пользователя выберите поток пользователя Сброс пароля.
  4. В разделе Выбор версии, выберите элемент Рекомендуемая и нажмите кнопку Создать.
  5. В поле Имя введите имя потока пользователя. Например, passwordreset1.
  6. В разделе Поставщики удостоверений включите Сброс пароля с использованием имени пользователя или Сброс пароля с использованием адреса электронной почты.
  7. Если требуется, чтобы пользователи проверяли свои удостоверения с использованием второго метода проверки подлинности, в разделе Многофакторная проверка подлинности выберите тип метода и укажите, когда следует применять многофакторную проверку подлинности. Подробнее.
  8. Если вы настроили политики условного доступа для клиента Azure AD B2C и хотите использовать их в этом потоке пользователя, в разделе Условный доступ установите флажок Enforce conditional access policies (Принудительное применение политик условного доступа). Указывать имя политики не требуется. Подробнее.
  9. В разделе Утверждения приложения выберите элемент Показать еще. Выберите утверждения, которые должны возвращаться в маркерах авторизации, отправляемых обратно в приложение. Например, выберите ИД объекта пользователя.
  10. Нажмите ОК.
  11. Для добавления потока пользователя выберите команду Создать. Префикс B2C_1 автоматически добавляется к имени.

Тестирование потока пользователя

Тестирование потока пользователя:

  1. Выберите созданный поток пользователя. На странице обзора потока пользователя выберите команду Выполнить поток пользователя.
  2. Для приложения выберите веб-приложение, которое вы хотите протестировать, например одно именованное webapp1 , если вы зарегистрировали это ранее. URL-адрес ответа должен иметь значение https://jwt.ms.
  3. Выберите "Запустить поток пользователя", проверьте адрес электронной почты учетной записи, для которой требуется сбросить пароль, а затем нажмите кнопку "Продолжить".
  4. Измените пароль, а затем щелкните команду Продолжить. В https://jwt.ms возвращается токен, и браузер отображает его.

Создание политики сброса паролей

Настраиваемые политики представляют собой набор XML-файлов, которые вы отправляете в клиент Azure AD B2C для определения путей взаимодействия пользователей. Мы предоставляем начальные пакеты, в которых есть несколько готовых политик, включая политики регистрации, входа, сброса пароля и изменения профиля. Дополнительные сведения см. в статье Начало работы с настраиваемыми политиками в Azure AD B2C.

Устранение неполадок с потоками пользователей и настраиваемыми политиками Azure AD B2C

Приложению необходимо обработать определенные ошибки, сообщения о которых поступают от службы Azure B2C. Узнайте, как устранять неполадки с потоками пользователей и настраиваемыми политиками Azure AD B2C.

Следующие шаги

Настройка принудительного сброса пароля.

Регистрация и вход с помощью встроенного сброса пароля.