Поделиться через


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

Это важно

Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".

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

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

Это важно

В этом примере используется встроенное утверждение 'город'. Вместо этого можно выбрать один из поддерживаемых встроенных атрибутов 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. Выберите атрибуты пользователя и выберите атрибут пользователя (например, "Город").
  7. Нажмите кнопку "Сохранить".

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

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

  1. Выберите политику (например, B2C_1_SignupSignin), чтобы открыть ее.
  2. Выберите запросы приложения.
  3. Выберите атрибуты, которые нужно отправить обратно в приложение (например, "Город").
  4. Нажмите кнопку "Сохранить".

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

  1. Выберите политику (например, B2C_1_SignupSignin), чтобы открыть ее.

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

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

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

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

  6. Нажмите кнопку "Сохранить".

    Вызов зеленого API веб-страницы.

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

Чтобы указать список значений для атрибута города:

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

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

  • 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. Определите понятие "город".
  2. Попросите пользователя о своем городе.
  3. Сохраните город в профиле пользователя в каталоге Azure AD B2C.
  4. Читайте утверждение о городе из каталога Azure AD B2C при каждом входе в систему.
  5. Верните город в приложение доверяющей стороны после входа в систему или регистрации.

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

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

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

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

  1. Найдите элемент BuildingBlocks . Если элемент не существует, добавьте его.
  2. Найдите элемент ClaimsSchema . Если элемент не существует, добавьте его.
  3. Добавьте утверждение города в элемент 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 — процесс редактирования профиля.

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

<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>

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

<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>
  <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>

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

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

<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. На странице регистрации или входа выберите "Зарегистрироваться ", чтобы зарегистрироваться. Завершите ввод сведений о пользователе, включая имя города, а затем нажмите кнопку "Создать". Вы увидите содержимое возвращенного маркера.

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

Снимок экрана: измененный параметр регистрации

Маркер, отправляемый в приложение, включает city утверждение.

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "exp": 1583500140,
  "nbf": 1583496540,
  "ver": "1.0",
  "iss": "https://contoso.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/",
  "aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "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 коллекцию города утверждений со списком элементов для английского и испанского языков. Элемент 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>-->

Дальнейшие шаги