ContentDefinitions

Примечание

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

Вы можете настроить внешний вид любого самоподтвержденного технического профиля. Служба Azure Active Directory B2C выполняет код в браузере пользователя и использует современный подход — общий доступ к ресурсам независимо от источника (CORS).

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

Элемент ContentDefinitions содержит URL-адреса шаблонов HTML5, которые могут использоваться в пути взаимодействия пользователя. URI страницы HTML5 используется для указанного шага пользовательского интерфейса, например для входа или регистрации, сброса пароля или страниц ошибок. Внешний вид можно изменить с помощью переопределения LoadUri для файла HTML5. Можно создать новые определения содержимого в соответствии с потребностями. Этот элемент может содержать ссылку на локализованные ресурсы — идентификатор локализации, заданный в элементе Localization.

В следующем примере показаны идентификатор определения содержимого и определение локализованных ресурсов:

<ContentDefinition Id="api.localaccountsignup">
  <LoadUri>~/tenant/default/selfAsserted.cshtml</LoadUri>
  <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
  <DataUri>urn:com:microsoft:aad:b2c:elements:selfasserted:1.1.0</DataUri>
  <Metadata>
    <Item Key="DisplayName">Local account sign up page</Item>
  </Metadata>
  <LocalizedResourcesReferences MergeBehavior="Prepend">
    <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.localaccountsignup.en" />
    <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.localaccountsignup.es" />
    ...

Метаданные самоподтвержденного технического профиля LocalAccountSignUpWithLogonEmail содержат идентификатор определения содержимого ContentDefinitionReferenceId, для которого задано значение api.localaccountsignup

<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
  <DisplayName>Email signup</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.localaccountsignup</Item>
    ...
  </Metadata>
  ...

ContentDefinition

Элемент ContentDefinition содержит следующий атрибут:

attribute Обязательно Описание
Идентификатор Да Идентификатор определения содержимого. Значение указано в разделе Идентификаторы определения содержимого далее на этой странице.

Элемент ContentDefinition содержит следующие элементы:

Элемент Вхождения Описание
LoadUri 1:1 Строка, содержащая URL-адрес страницы HTML5 для определения содержимого.
RecoveryUri 1:1 Строка, содержащая URL-адрес страницы HTML для отображения ошибки, связанной с определением содержимого. В настоящее время не используется, значение должно быть ~/common/default_page_error.html.
DataUri 1:1 Строка, содержащая относительный URL-адрес HTML-файла, который предоставляет пользовательский интерфейс для вызова соответствующего шага.
Метаданные 0:1 Коллекция пар "ключ — значение", содержащая метаданные, используемые в определении содержимого.
LocalizedResourcesReferences 0:1 Коллекция ссылок на локализованные ресурсы. Этот элемент позволяет настроить локализацию пользовательского интерфейса и атрибута утверждений (claims).

LoadUri

Элемент LoadUri используется для указания URL-адреса страницы HTML5 для определения содержимого. Начальные пакеты пользовательской политики Azure AD B2C поставляются с определениями содержимого, которые используют HTML-страницы Azure AD B2C. LoadUri начинается с ~, который представляет собой относительный путь к клиенту Azure AD B2C.

<ContentDefinition Id="api.signuporsignin">
  <LoadUri>~/tenant/templates/AzureBlue/unified.cshtml</LoadUri>
  ...
</ContentDefinition>

Можно настроить пользовательский интерфейс с помощью HTML-шаблонов. При использовании HTML-шаблонов укажите абсолютный URL-адрес. В следующем примере показано определение содержимого с помощью HTML-шаблона:

<ContentDefinition Id="api.signuporsignin">
  <LoadUri>https://your-storage-account.blob.core.windows.net/your-container/customize-ui.html</LoadUri>
  ...
</ContentDefinition>

DataUri

Элемент DataUri используется для указания идентификатора страницы. В Azure AD B2C идентификатор страницы используется для загрузки и запуска элементов пользовательского интерфейса и JavaScript на стороне клиента. Формат значения — urn:com:microsoft:aad:b2c:elements:page-name:version. В следующей таблице перечислены идентификаторы страниц, которые можно использовать.

Идентификатор страницы Описание
globalexception Отображает страницу ошибки при обнаружении исключения или ошибки.
providerselection, idpselection Отображает список поставщиков удостоверений, которые пользователи могут выбирать во время входа.
unifiedssp Отображает форму для входа в локальную учетную запись (на основе адреса электронной почты или имени пользователя). Это значение также предоставляет функцию "Оставаться в системе" и ссылку "Забыли пароль?".
unifiedssd Отображает форму для входа в локальную учетную запись на основе адреса электронной почты или имени пользователя. Этот идентификатор страницы устарел. Используйте вместо него идентификатор страницы unifiedssp.
multifactor Проверяет номера телефонов с помощью SMS-сообщения или голосового вызова во время регистрации или входа.
selfasserted Отображает форму для сбора данных от пользователя. Например, позволяет пользователям создать или обновить свой профиль.

Выбор разметки страницы

Код JavaScript на стороне клиента можно включить путем вставки contract между elements и типом страницы. Например, urn:com:microsoft:aad:b2c:elements:contract:page-name:version.

Часть version в DataUri определяет пакет содержимого, содержащего HTML, CSS и JavaScript для элементов пользовательского интерфейса в политике. Если вы планируете включить код JavaScript на стороне клиента, элементы, которые основаны на вашем коде JavaScript, должны быть неизменяемыми. Если они не будут неизменяемыми, любые изменения могут вызвать непредвиденное поведение на страницах пользователя. Чтобы избежать этих проблем, принудительно примените разметки страницы и укажите версию разметки страницы. Это гарантирует, что все определения содержимого, на которых основан JavaScript, останутся неизменяемыми. Даже если вы не планируете включать JavaScript, все равно необходимо указать версию разметки для страниц.

В следующем примере показан DataUriselfasserted версии 1.2.0:

<!-- 
<BuildingBlocks> 
  <ContentDefinitions>-->
    <ContentDefinition Id="api.localaccountpasswordreset">
      <LoadUri>~/tenant/templates/AzureBlue/selfAsserted.cshtml</LoadUri>
      <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:1.2.0</DataUri>
      <Metadata>
        <Item Key="DisplayName">Local account change password page</Item>
      </Metadata>
    </ContentDefinition>
  <!-- 
  </ContentDefinitions> 
</BuildingBlocks> -->

Переход на разметку страницы

Чтобы выполнить миграцию со старого значения DataUri (без контракта страниц) на версию с разметкой страниц, добавьте слово contract после версии страницы. Используйте следующую таблицу для перехода со старого значения DataUri на версию с разметкой страниц.

Старое значение DataUri Новое значение DataUri
urn:com:microsoft:aad:b2c:elements:globalexception:1.0.0 urn:com:microsoft:aad:b2c:elements:contract:globalexception:1.2.1
urn:com:microsoft:aad:b2c:elements:globalexception:1.1.0 urn:com:microsoft:aad:b2c:elements:contract:globalexception:1.2.1
urn:com:microsoft:aad:b2c:elements:idpselection:1.0.0 urn:com:microsoft:aad:b2c:elements:contract:providerselection:1.2.1
urn:com:microsoft:aad:b2c:elements:selfasserted:1.0.0 urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7
urn:com:microsoft:aad:b2c:elements:selfasserted:1.1.0 urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7
urn:com:microsoft:aad:b2c:elements:unifiedssd:1.0.0 urn:com:microsoft:aad:b2c:elements:contract:unifiedssd:1.2.1
urn:com:microsoft:aad:b2c:elements:unifiedssp:1.0.0 urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.5
urn:com:microsoft:aad:b2c:elements:unifiedssp:1.1.0 urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.5
urn:com:microsoft:aad:b2c:elements:multifactor:1.0.0 urn:com:microsoft:aad:b2c:elements:contract:multifactor:1.2.5
urn:com:microsoft:aad:b2c:elements:multifactor:1.1.0 urn:com:microsoft:aad:b2c:elements:contract:multifactor:1.2.5

В следующем примере показаны идентификаторы определения содержимого и соответствующие DataUri с последней версией страницы:

<!-- 
<BuildingBlocks> -->
  <ContentDefinitions>
    <ContentDefinition Id="api.error">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:globalexception:1.2.1</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.idpselections">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:providerselection:1.2.1</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.idpselections.signup">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:providerselection:1.2.1</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.signuporsignin">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.7</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.selfasserted">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.14</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.selfasserted.profileupdate">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.14</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.localaccountsignup">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.14</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.localaccountpasswordreset">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.14</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.phonefactor">
      <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:multifactor:1.2.5</DataUri>
    </ContentDefinition>
  </ContentDefinitions>
<!-- 
</BuildingBlocks> -->

Метаданные

Элемент Metadata содержит следующие элементы.

Элемент Вхождения Описание
Item 0:n Метаданные, относящиеся к определению содержимого.

Элемент Item из элемента Metadata содержит следующие атрибуты:

attribute Обязательно Описание
Клавиши Да Ключ метаданных.

Ключи метаданных

Определение содержимого поддерживает следующие элементы метаданных:

Ключ Обязательно Описание
DisplayName нет Строка, содержащая имя определения содержимого.

LocalizedResourcesReferences

Элемент LocalizedResourcesReferences содержит следующие элементы:

Элемент Вхождения Описание
LocalizedResourcesReference 1:n Список ссылок на локализованные ресурсы для определения содержимого.

Элемент LocalizedResourcesReference содержит следующие атрибуты:

attribute Обязательно Описание
Язык Да Строка, содержащая поддерживаемый язык для политики согласно стандарту RFC 5646 "Tags for Identifying Languages" (Теги для идентификации языков).
LocalizedResourcesReferenceId Да Идентификатор элемента LocalizedResources.

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

<ContentDefinition Id="api.signuporsignin">
  <LoadUri>~/tenant/default/unified.cshtml</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="fr" LocalizedResourcesReferenceId="api.signuporsignin.rf" />
    <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.signuporsignin.es" />
</LocalizedResourcesReferences>
</ContentDefinition>

Сведения о том, как добавить поддержку локализации в определения содержимого, см. в описании элемента Localization.

Идентификаторы определения содержимого

Атрибут ID (идентификатор) элемента ContentDefinition указывает тип страницы, относящейся к определению содержимого. Этот элемент определяет контекст, который будет применяться в пользовательском шаблоне HTML5 или CSS. В следующей таблице описан набор идентификаторов определений содержимого, распознаваемых Identity Experience Framework, и типы страниц, относящиеся к ним. Вы можете создать собственные определения содержимого с произвольным идентификатором.

ID Шаблон по умолчанию Описание
api.error exception.cshtml Страница ошибки — отображает страницу ошибки при обнаружении исключения или ошибки.
api.idpselections idpSelector.cshtml Страница выбора поставщика удостоверений — на этой странице содержится список поставщиков удостоверений, которые пользователи могут выбирать во время входа. Обычно это поставщики удостоверений организаций, социальных сетей, включая Facebook и Google+, или локальных учетных записей.
api.idpselections.signup idpSelector.cshtml Выбор поставщика удостоверений для регистрации — на этой странице содержится список поставщиков удостоверений, которые пользователи могут выбирать во время регистрации. Обычно это поставщики удостоверений организаций, социальных сетей, включая Facebook и Google+, или локальных учетных записей.
api.localaccountpasswordreset selfasserted.cshtml Страница "Забыли пароль?" — отображает форму, которую пользователи должны заполнить для сброса пароля.
api.localaccountsignin selfasserted.cshtml Страница входа в локальную учетную запись — отображает форму для входа в локальную учетную запись (на основе адреса электронной почты или имени пользователя). Форма может содержать текстовое поле ввода и окно ввода пароля.
api.localaccountsignup selfasserted.cshtml Страница регистрации локальной учетной записи — отображает форму для регистрации локальной учетной записи на основе адреса электронной почты или имени пользователя. Форма может содержать разные элементы управления для ввода текста, например: текстовое поле, поле ввода пароля, переключатель, раскрывающийся список с единственным выбором или флажки множественного выбора.
api.phonefactor multifactor-1.0.0.cshtml Страница многофакторной проверки подлинности — проверяет номера телефонов с помощью SMS-сообщения или голосового вызова во время регистрации или входа.
api.selfasserted selfasserted.cshtml Страница регистрации учетной записи социальной сети — отображает форму, которую нужно заполнить при регистрации с использованием существующей учетной записи от поставщика удостоверений в социальных сетях. Эта страница аналогична странице регистрации локальных учетных записей, за исключением полей для ввода пароля.
api.selfasserted.profileupdate updateprofile.cshtml Страница обновления профиля — отображает форму для обновления профиля пользователя. Эта страница аналогична странице регистрации локальных учетных записей, за исключением полей для ввода пароля.
api.signuporsignin unified.cshtml Унифицированная страница регистрации и входа — обрабатывает процесс регистрации и входа пользователей. Пользователи могут использовать поставщики удостоверений организаций, социальных сетей, включая Facebook и Google+, или локальные учетные записи.

Дальнейшие действия

Пример настройки пользовательского интерфейса с помощью определений содержимого см. в следующих источниках:

Настройка пользовательского интерфейса приложения с помощью настраиваемой политики