Добавление атрибутов пользователя и настройка ввода данных пользователем в Azure Active Directory B2C

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

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

Важно!

В этом примере используется встроенное утверждение city. Вместо этого можно выбрать один из поддерживаемых встроенных атрибутов Azure AD B2C или пользовательский атрибут. Чтобы использовать настраиваемый атрибут, включите настраиваемые атрибуты. Чтобы использовать другой встроенный или настраиваемый атрибут, замените city на желаемый атрибут, например встроенный атрибут jobTitle или настраиваемый атрибут, такой как extension_loyaltyId.

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

Добавление атрибутов пользователя в поток пользователя

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким клиентам, выберите значок Параметры в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню каталогов и подписок.
  3. В разделе Службы Azure выберите Azure AD B2C. Или используйте поле поиска, чтобы найти и выбрать Azure AD B2C.
  4. В клиенте Azure AD B2C выберите Потоки пользователей.
  5. Откройте политику (например B2C_1_SignupSignin), щелкнув ее.
  6. Выберите Атрибуты пользователя, а затем атрибут пользователя (например, city).
  7. Выберите Сохранить.

Предоставление дополнительных утверждений для приложения

Утверждения приложения — это значения, возвращаемые приложению. Обновите поток пользователя, чтобы он содержал нужные утверждения.

  1. Откройте политику (например B2C_1_SignupSignin), щелкнув ее.
  2. Выберите элемент Утверждения приложения.
  3. Выберите атрибуты, которые необходимо отправить обратно в приложение (например, city).
  4. Выберите Сохранить.

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

  1. Откройте политику (например B2C_1_SignupSignin), щелкнув ее.

  2. Выберите Макеты страниц.

  3. Выберите Страница регистрации локальной учетной записи.

  4. В разделе Атрибуты пользователя выберите city.

    1. В раскрывающемся списке Необязательно выберите Нет.
    2. В поле тип входных данных пользователявыберите текущий тип входных данных от пользователя, например текстовое поле, чтобы открыть панель окна редактора типов входных данных.
    3. В раскрывающемся списке Пользовательский тип ввода выберите DropdownSingleSelect.
    4. В полях Текст и Значения введите пары текста и значений, которые вам нужны для полного набора ответов по этому атрибуту. Введенный Текст отображается в веб-интерфейсе для вашего потока, а Значения сохраняются в Azure AD B2C для выбранного варианта Текст. Необязательно. Используйте кнопки "Переместить вверх/вниз", чтобы изменить порядок элементов в раскрывающемся списке.
  5. Выберите ОК Необязательно. Используйте кнопки "Переместить вверх/вниз", чтобы изменить порядок атрибутов пользователя на странице регистрации.

  6. Выберите Сохранить.

    Web page call green API.

Указание списка значений с помощью локализованных коллекций

Чтобы предоставить установленный список значений для атрибута city, выполните следующие действия.

  1. Включение настройки языка в потоке пользователя
  2. Откройте политику (например B2C_1_SignupSignin), щелкнув ее.
  3. На странице Языки для потока пользователя выберите язык, который требуется настроить.
  4. В разделе Файлы ресурсов на уровне страницы выберите страницу регистрации локальной учетной записи.
  5. Нажмите кнопку Скачать значения по умолчанию (или Скачать переопределения, если этот язык ранее менялся).
  6. Создайте атрибут LocalizedCollections.

LocalizedCollections является массивом пар Name и Value. Порядок размещения элементов определяет порядок их отображения.

  • ElementId представляет собой пользовательский атрибут, ответом на который является LocalizedCollections.
  • Name является значением, которое видит пользователь.
  • Value возвращается в утверждении при выборе этого параметра.
{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType": "ClaimType",
      "ElementId": "city",
      "TargetCollection": "Restriction",
      "Override": true,
      "Items": [
        {
          "Name": "Berlin",
          "Value": "Berlin"
        },
        {
          "Name": "London",
          "Value": "London"
        },
        {
          "Name": "Seattle",
          "Value": "Seattle"
        }
      ]
    }
  ]
}

Загрузка изменений

  1. Внеся изменения в JSON-файл, вернитесь к клиенту B2C.
  2. Выберите Потоки пользователей, а затем политику (например, B2C_1_SignupSignin), чтобы ее открыть.
  3. Щелкните Языки.
  4. Выберите язык, на который требуется выполнить перевод.
  5. В разделе Файлы ресурсов на уровне страницы выберите страницу регистрации локальной учетной записи.
  6. Щелкните значок папки и выберите JSON-файл для отправки. Изменения автоматически сохраняются в потоке пользователя.

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

  1. Откройте политику (например B2C_1_SignupSignin), щелкнув ее.
  2. Чтобы проверить политику, выберите Выполнить поток пользователя.
  3. В разделе Приложение выберите зарегистрированное ранее веб-приложение с именем testapp1. В поле URL-адрес ответа должно содержаться значение https://jwt.ms.
  4. Щелкните Выполнить поток пользователя

Обзор

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

  1. Определите утверждение city.
  2. Попросите пользователя указать его город.
  3. Сохраните город в профиле пользователя в каталоге Azure AD B2C.
  4. Прочтете утверждение city из каталога Azure AD B2C при входе.
  5. Вернете город приложению проверяющей стороны после входа или регистрации.

Определение утверждения

Утверждение предоставляет временное хранилище данных на время выполнения политики Azure AD B2C. Схема утверждений — это место, где вы объявляете свои утверждения. Для определения утверждения используются такие элементы:

  • DisplayName — это строка, определяющая пользовательскую метку.
  • DataType — тип утверждения.
  • UserHelpText — позволяет пользователю узнать требования.
  • UserInputType — тип элемента управления вводом, например текстовое поле, переключатель, раскрывающийся список или множественный выбор.

Откройте файл расширения политики. Например, SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Найдите элемент BuildingBlocks. Если такой элемент не существует, добавьте его.
  2. Найдите элемент ClaimsSchema. Если такой элемент не существует, добавьте его.
  3. Добавьте утверждение city в элемент ClaimsSchema.
<!-- 
<BuildingBlocks>
  <ClaimsSchema> -->
    <ClaimType Id="city">
      <DisplayName>City where you work</DisplayName>
      <DataType>string</DataType>
      <UserInputType>DropdownSingleSelect</UserInputType>
      <Restriction>
        <Enumeration Text="Berlin" Value="berlin" />
        <Enumeration Text="London" Value="london" />
        <Enumeration Text="Seattle" Value="seattle" />
      </Restriction>
    </ClaimType>
  <!-- 
  </ClaimsSchema>
</BuildingBlocks>-->

Включите атрибут SelectByDefault в элемент Enumeration, чтобы он выбирался по умолчанию при первой загрузке страницы. Например, чтобы настроить предварительный выбор элемента Лондон, измените элемент Enumeration, как показано в следующем примере.

<Restriction>
  <Enumeration Text="Berlin" Value="berlin" />
  <Enumeration Text="London" Value="london" SelectByDefault="true" />
  <Enumeration Text="Seattle" Value="seattle" />
</Restriction>

Добавление утверждения в пользовательский интерфейс

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

  • LocalAccountSignUpWithLogonEmail — поток регистрации локальной учетной записи.
  • SelfAsserted-Social — первый вход пользователя в федеративную учетную запись.
  • SelfAsserted-ProfileUpdate — поток изменения профиля.

Чтобы получить утверждение city во время регистрации, его необходимо добавить в технический профиль LocalAccountSignUpWithLogonEmail как исходящее утверждение. Переопределите технический профиль в файле расширения. Укажите полный список исходящих утверждений для управления порядком, в котором они представлены на экране. Найдите элемент ClaimsProviders. Добавьте новый элемент ClaimsProvider следующим образом.

<ClaimsProvider>
  <DisplayName>Local Account</DisplayName>
  <TechnicalProfiles>
    <!--Local account sign-up page-->
    <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
      <OutputClaims>
       <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
       <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
       <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
       <OutputClaim ClaimTypeReferenceId="displayName" />
       <OutputClaim ClaimTypeReferenceId="givenName" />
       <OutputClaim ClaimTypeReferenceId="surName" />
       <OutputClaim ClaimTypeReferenceId="city"/>
     </OutputClaims>
   </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Чтобы получить утверждение city после первого входа в федеративную учетную запись, его нужно добавить как исходящее утверждение в технический профиль SelfAsserted-Social. Чтобы пользователи локальных и федеративных учетных записей могли изменить данные своего профиля позже, добавьте входящие и исходящие утверждения в технический профиль SelfAsserted-ProfileUpdate. Переопределите эти технические профили в файле расширения. Укажите полный список исходящих утверждений для управления порядком, в котором они представлены на экране. Найдите элемент ClaimsProviders. Добавьте новый элемент ClaimsProvider следующим образом.

<ClaimsProvider>
  <DisplayName>Self Asserted</DisplayName>
  <TechnicalProfiles>
    <!--Federated account first-time sign-in page-->
    <TechnicalProfile Id="SelfAsserted-Social">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="city" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName"/>
        <OutputClaim ClaimTypeReferenceId="givenName"/>
        <OutputClaim ClaimTypeReferenceId="surname"/>
        <OutputClaim ClaimTypeReferenceId="city"/>
      </OutputClaims>
    </TechnicalProfile>
    <!--Edit profile page-->
    <TechnicalProfile Id="SelfAsserted-ProfileUpdate">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="city" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName"/>
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="city"/>
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Чтение и запись утверждения

Ниже приведены технические профили Active Directory, которые считывают и записывают данные в идентификатор Microsoft Entra.
Используйте PersistedClaims для записи данных в профиль пользователя и OutputClaims для чтения данных из профиля пользователя в соответствующих технических профилях Active Directory.

Переопределите эти технические профили в файле расширения. Найдите элемент ClaimsProviders. Добавьте новый элемент ClaimsProvider следующим образом.

<ClaimsProvider>
  <DisplayName>Azure Active Directory</DisplayName>
  <TechnicalProfiles>
    <!-- Write data during a local account sign-up flow. -->
    <TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Write data during a federated account first-time sign-in flow. -->
    <TechnicalProfile Id="AAD-UserWriteUsingAlternativeSecurityId">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Write data during edit profile flow. -->
    <TechnicalProfile Id="AAD-UserWriteProfileUsingObjectId">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Read data after user resets the password. -->
    <TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
    <!-- Read data after user authenticates with a local account. -->
    <TechnicalProfile Id="AAD-UserReadUsingObjectId">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
    <!-- Read data after user authenticates with a federated account. -->
    <TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Включение утверждения в токен

Чтобы вернуть утверждение city в приложение проверяющей стороны, добавьте выходное утверждение в файл SocialAndLocalAccounts/SignUpOrSignIn.xml. Исходящее утверждение будет добавлено в маркер после успешного пути взаимодействия пользователя и отправлено в приложение. Измените элемент технического профиля в разделе проверяющей стороны, чтобы добавить city в качестве исходящего утверждения.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
      <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
      <OutputClaim ClaimTypeReferenceId="city" DefaultValue="" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>

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

  1. Если у вас есть доступ к нескольким клиентам, выберите значок Параметры в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню каталогов и подписок.
  2. Найдите и выберите Azure AD B2C.
  3. В разделе Политики выберите Identity Experience Framework.
  4. Выберите Отправить настраиваемую политику.
  5. Отправьте измененные ранее файлы политики.

Проверка пользовательской политики

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

Экран регистрации должен выглядеть примерно следующим образом.

Screenshot of modified sign-up option

Токен, отправленный обратно в ваше приложение, включает утверждение city.

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "exp": 1583500140,
  "nbf": 1583496540,
  "ver": "1.0",
  "iss": "https://contoso.b2clogin.com/f06c2fe8-709f-4030-85dc-38a4bfd9e82d/v2.0/",
  "aud": "e1d2612f-c2bc-4599-8e7b-d874eaca1ee1",
  "acr": "b2c_1a_signup_signin",
  "nonce": "defaultNonce",
  "iat": 1583496540,
  "auth_time": 1583496540,
  "name": "Emily Smith",
  "email": "joe@outlook.com",
  "given_name": "Emily",
  "family_name": "Smith",
  "city": "Berlin"
  ...
}

[Необязательно] Локализация пользовательского интерфейса

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

Примечание.

При использовании LocalizedCollection с метками, зависящими от языка, вы можете удалить коллекцию Restriction из определения утверждения.

В следующем примере показано, как предоставить список городов для английского и испанского языков. Оба они устанавливают коллекцию Restriction для утверждения city со списком элементов на английском и испанском языках. SelectByDefault задает выбор элемента по умолчанию при первой загрузке страницы.

<!-- 
<BuildingBlocks>-->
  <Localization Enabled="true">
    <SupportedLanguages DefaultLanguage="en" MergeBehavior="Append">
      <SupportedLanguage>en</SupportedLanguage>
      <SupportedLanguage>es</SupportedLanguage>
    </SupportedLanguages>
    <LocalizedResources Id="api.localaccountsignup.en">
      <LocalizedCollections>
        <LocalizedCollection ElementType="ClaimType" ElementId="city" TargetCollection="Restriction">
          <Item Text="Berlin" Value="Berlin"></Item>
          <Item Text="London" Value="London" SelectByDefault="true"></Item>
          <Item Text="Seattle" Value="Seattle"></Item>
        </LocalizedCollection>
      </LocalizedCollections>
    </LocalizedResources>
    <LocalizedResources Id="api.localaccountsignup.es">
      <LocalizedCollections>
        <LocalizedCollection ElementType="ClaimType" ElementId="city" TargetCollection="Restriction">
          <Item Text="Berlina" Value="Berlin"></Item>
          <Item Text="Londres" Value="London" SelectByDefault="true"></Item>
          <Item Text="Seattle" Value="Seattle"></Item>
        </LocalizedCollection>
      </LocalizedCollections>
    </LocalizedResources>
  </Localization>
<!-- 
</BuildingBlocks>-->

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

<!-- 
<BuildingBlocks>
  <ContentDefinitions> -->
   <ContentDefinition Id="api.localaccountsignup">
    <LocalizedResourcesReferences MergeBehavior="Prepend">
        <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.localaccountsignup.en" />
        <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.localaccountsignup.es" />
    </LocalizedResourcesReferences>
   </ContentDefinition>
  <!-- 
  </ContentDefinitions>
</BuildingBlocks>-->

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