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


Предикаты и предикатыValidations

Это важно

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

Замечание

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

Элементы Predicates и PredicateValidations позволяют выполнять процесс проверки, чтобы убедиться, что в клиент Azure Active Directory B2C (Azure AD B2C) вводятся только правильно сформированные данные.

На следующей схеме показана связь между элементами:

Схема, показывающая отношения

Предикаты

Элемент Predicate определяет базовую проверку для проверки значения типа утверждения и возврата true или false. Проверка выполняется с помощью указанного элемента Method и набора элементов Parameter , относящихся к методу. Например, предикат может проверить, находится ли длина строкового значения утверждения в диапазоне минимальных и максимальных параметров или содержит ли строковое значение утверждения набор символов. Элемент UserHelpText предоставляет сообщение об ошибке для пользователей, если проверка завершается ошибкой. Значение элемента UserHelpText можно локализовать с помощью настройки языка.

Элемент Predicates должен отображаться непосредственно после элемента ClaimsSchema в элементе BuildingBlocks .

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

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

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

Свойство Обязательно Описание
Идентификатор Да Идентификатор, используемый для предиката. Другие элементы могут использовать этот идентификатор в политике.
Метод Да Тип метода, используемый для проверки. Возможные значения: IsLengthRange, MatchesRegex, IncludesCharacters или IsDateRange.
Текст справки нет Сообщение об ошибке для пользователей, если проверка завершается ошибкой. Эта строка может быть локализована с помощью настройки языка

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

Элемент Вхождения Описание
UserHelpText 00:14 (не рекомендуется) Сообщение об ошибке для пользователей, если проверка завершается ошибкой.
Параметры 1:1 Параметры для типа метода проверки строки.

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

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

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

Элемент Вхождения Описание
Идентификатор 1:1 Идентификатор параметра.

Методы предиката

IsLengthRange (Диапазон длины)

Метод IsLengthRange проверяет, находится ли длина строкового значения утверждения в диапазоне минимальных и максимальных параметров. Ознакомьтесь с демонстрацией live этого метода предиката. Элемент предиката поддерживает следующие параметры:

Параметр Обязательно Описание
Максимум Да Максимальное число символов, которые можно ввести.
Минимум Да Минимальное число символов, которые необходимо ввести.

В следующем примере показан метод IsLengthRange с параметрами Minimum и Maximum указание диапазона длины строки:

<Predicate Id="IsLengthBetween8And64" Method="IsLengthRange" HelpText="The password must be between 8 and 64 characters.">
  <Parameters>
    <Parameter Id="Minimum">8</Parameter>
    <Parameter Id="Maximum">64</Parameter>
  </Parameters>
</Predicate>

MatchesRegex

Метод MatchesRegex проверяет, соответствует ли строковое значение утверждения регулярному выражению. Ознакомьтесь с демонстрацией live этого метода предиката. Элемент предиката поддерживает следующие параметры:

Параметр Обязательно Описание
Регулярное выражение Да Шаблон регулярного выражения, соответствующий.

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

<Predicate Id="PIN" Method="MatchesRegex" HelpText="The password must be numbers only.">
  <Parameters>
    <Parameter Id="RegularExpression">^[0-9]+$</Parameter>
  </Parameters>
</Predicate>

ВключаетCharacters

Метод IncludesCharacters проверяет, содержит ли строковое значение утверждения набор символов. Ознакомьтесь с демонстрацией live этого метода предиката. Элемент предиката поддерживает следующие параметры:

Параметр Обязательно Описание
Символьный набор Да Набор символов, которые можно ввести. Например, строчные символы, прописные символыa-zA-Z, цифры 0-9или список символов, например@#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

В следующем примере показан метод с параметром IncludesCharactersCharacterSet , указывающим набор символов:

<Predicate Id="Lowercase" Method="IncludesCharacters" HelpText="a lowercase letter">
  <Parameters>
    <Parameter Id="CharacterSet">a-z</Parameter>
  </Parameters>
</Predicate>

IsDateRange (Диапазон дат)

Метод IsDateRange проверяет, является ли значение утверждения даты между диапазоном минимальных и максимальных параметров. Ознакомьтесь с демонстрацией live этого метода предиката. Элемент предиката поддерживает следующие параметры:

Параметр Обязательно Описание
Максимум Да Самая большая возможная дата, которую можно ввести. Формат даты следует yyyy-mm-dd соглашению или Today.
Минимум Да Наименьшая возможная дата, которую можно ввести. Формат даты следует yyyy-mm-dd соглашению или Today.

В следующем примере показан IsDateRange метод с параметрами Minimum и Maximum указание диапазона дат с форматом yyyy-mm-dd и Today.

<Predicate Id="DateRange" Method="IsDateRange" HelpText="The date must be between 1970-01-01 and today.">
  <Parameters>
    <Parameter Id="Minimum">1970-01-01</Parameter>
    <Parameter Id="Maximum">Today</Parameter>
  </Parameters>
</Predicate>

ПредикатValidations

Хотя предикаты определяют проверку для проверки типа утверждения, группа PredicateValidations группирует набор предикатов для формирования проверки ввода пользователем, которая может применяться к типу утверждения. Каждый элемент PredicateValidation содержит набор элементов PredicateGroup , содержащих набор элементов PredicateReference , указывающих на предикат. Чтобы пройти проверку, значение утверждения должно пройти все тесты любого предиката во всех предикатах всех предикатов с набором элементов PredicateReference .

Элемент PredicateValidations должен отображаться непосредственно после элемента Predicates в элементе BuildingBlocks .

<PredicateValidations>
  <PredicateValidation Id="">
    <PredicateGroups>
      <PredicateGroup Id="">
        <UserHelpText></UserHelpText>
        <PredicateReferences MatchAtLeast="">
          <PredicateReference Id="" />
          ...
        </PredicateReferences>
      </PredicateGroup>
      ...
    </PredicateGroups>
  </PredicateValidation>
...
</PredicateValidations>

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

Элемент Вхождения Описание
ПредикатValidation 1:n Список проверки предиката.

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

Свойство Обязательно Описание
Идентификатор Да Идентификатор, используемый для проверки предиката. Элемент ClaimType может использовать этот идентификатор в политике.

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

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

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

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

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

Свойство Обязательно Описание
Идентификатор Да Идентификатор, используемый для группы предиката.

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

Элемент Вхождения Описание
UserHelpText 00:14 Описание предиката, который может быть полезным для пользователей, чтобы узнать, какое значение они должны ввести.
ПредикатСсылки 1:n Список ссылок на предикаты.

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

Свойство Обязательно Описание
MatchAtLeast нет Указывает, что значение должно соответствовать по крайней мере тому, что многие определения предиката для принятия входных данных. Если значение не указано, оно должно соответствовать всем определениям предиката.

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

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

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

Свойство Обязательно Описание
Идентификатор Да Идентификатор, используемый для проверки предиката.

Настройка сложности паролей

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

  • IsLengthBetween8And64 с помощью IsLengthRange метода проверяет, должен ли пароль находиться в диапазоне от 8 до 64 символов.
  • Строчная буква с помощью IncludesCharacters метода проверяет, содержит ли пароль строчную букву.
  • В верхнем регистреIncludesCharacters с помощью метода проверяется, содержит ли пароль прописную букву.
  • Число с помощью IncludesCharacters метода проверяет, содержит ли пароль цифру.
  • Символ с помощью IncludesCharacters метода проверяет, содержит ли пароль один из нескольких символов.
  • ПИН-код с помощью MatchesRegex метода проверяет, содержит ли пароль только числа.
  • AllowedAADCharacters с помощью MatchesRegex метода проверяет, предоставлен ли пароль только недопустимый символ.
  • Запретить использование метода disallowedWhitespaceMatchesRegex проверяет, что пароль не начинается или заканчивается символом пробела.
<Predicates>
  <Predicate Id="IsLengthBetween8And64" Method="IsLengthRange" HelpText="The password must be between 8 and 64 characters.">
    <Parameters>
      <Parameter Id="Minimum">8</Parameter>
      <Parameter Id="Maximum">64</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="Lowercase" Method="IncludesCharacters" HelpText="a lowercase letter">
    <Parameters>
      <Parameter Id="CharacterSet">a-z</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="Uppercase" Method="IncludesCharacters" HelpText="an uppercase letter">
    <Parameters>
      <Parameter Id="CharacterSet">A-Z</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="Number" Method="IncludesCharacters" HelpText="a digit">
    <Parameters>
      <Parameter Id="CharacterSet">0-9</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="Symbol" Method="IncludesCharacters" HelpText="a symbol">
    <Parameters>
      <Parameter Id="CharacterSet">@#$%^&amp;*\-_+=[]{}|\\:',.?/`~"();!</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="PIN" Method="MatchesRegex" HelpText="The password must be numbers only.">
    <Parameters>
      <Parameter Id="RegularExpression">^[0-9]+$</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="AllowedAADCharacters" Method="MatchesRegex" HelpText="An invalid character was provided.">
    <Parameters>
      <Parameter Id="RegularExpression">(^([0-9A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/`~"();! ]|(\.(?!@)))+$)|(^$)</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="DisallowedWhitespace" Method="MatchesRegex" HelpText="The password must not begin or end with a whitespace character.">
    <Parameters>
      <Parameter Id="RegularExpression">(^\S.*\S$)|(^\S+$)|(^$)</Parameter>
    </Parameters>
  </Predicate>

После определения основных проверок их можно объединить и создать набор политик паролей, которые можно использовать в политике:

  • SimplePassword проверяет запрещенное пространствоWhitespace, AllowedAADCharacters и IsLengthBetween8And64
  • StrongPassword проверяет запрещенное пространствоWhitespace, AllowedAADCharacters, IsLengthBetween8And64. Последняя группа CharacterClasses запускает дополнительный набор предикатов с MatchAtLeast набором 3. Пароль пользователя должен находиться в диапазоне от 8 до 16 символов и трех из следующих символов: нижний регистр, верхний регистр, число или символ.
  • CustomPassword проверяет только запрещенное пространствоWhitespace, AllowedAADCharacters. Таким образом, пользователь может предоставить любой пароль с любой длиной, если символы действительны.
<PredicateValidations>
  <PredicateValidation Id="SimplePassword">
    <PredicateGroups>
      <PredicateGroup Id="DisallowedWhitespaceGroup">
        <PredicateReferences>
          <PredicateReference Id="DisallowedWhitespace" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="AllowedAADCharactersGroup">
        <PredicateReferences>
          <PredicateReference Id="AllowedAADCharacters" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="LengthGroup">
        <PredicateReferences>
          <PredicateReference Id="IsLengthBetween8And64" />
        </PredicateReferences>
      </PredicateGroup>
    </PredicateGroups>
  </PredicateValidation>

  <PredicateValidation Id="StrongPassword">
    <PredicateGroups>
      <PredicateGroup Id="DisallowedWhitespaceGroup">
        <PredicateReferences>
          <PredicateReference Id="DisallowedWhitespace" />
       </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="AllowedAADCharactersGroup">
        <PredicateReferences>
          <PredicateReference Id="AllowedAADCharacters" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="LengthGroup">
        <PredicateReferences>
          <PredicateReference Id="IsLengthBetween8And64" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="CharacterClasses">
        <UserHelpText>The password must have at least 3 of the following:</UserHelpText>
        <PredicateReferences MatchAtLeast="3">
          <PredicateReference Id="Lowercase" />
          <PredicateReference Id="Uppercase" />
          <PredicateReference Id="Number" />
          <PredicateReference Id="Symbol" />
        </PredicateReferences>
      </PredicateGroup>
    </PredicateGroups>
  </PredicateValidation>

  <PredicateValidation Id="CustomPassword">
    <PredicateGroups>
      <PredicateGroup Id="DisallowedWhitespaceGroup">
        <PredicateReferences>
          <PredicateReference Id="DisallowedWhitespace" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="AllowedAADCharactersGroup">
        <PredicateReferences>
          <PredicateReference Id="AllowedAADCharacters" />
        </PredicateReferences>
      </PredicateGroup>
    </PredicateGroups>
  </PredicateValidation>
</PredicateValidations>

В типе утверждения добавьте элемент PredicateValidationReference и укажите идентификатор в качестве одного из проверок предиката, таких как SimplePassword, StrongPassword или CustomPassword.

<ClaimType Id="password">
  <DisplayName>Password</DisplayName>
  <DataType>string</DataType>
  <AdminHelpText>Enter password</AdminHelpText>
  <UserHelpText>Enter password</UserHelpText>
  <UserInputType>Password</UserInputType>
  <PredicateValidationReference Id="StrongPassword" />
</ClaimType>

Ниже показано, как элементы упорядочены при отображении сообщения об ошибке в Azure AD B2C:

Схема примера сложности паролей Predicate и PredicateGroup

Настройка диапазона дат

С помощью элементов Predicates и PredicateValidations можно управлять минимальными и максимальными значениями даты UserInputType с помощью a DateTimeDropdown. Для этого создайте предикат с IsDateRange методом и укажите минимальные и максимальные параметры.

<Predicates>
  <Predicate Id="DateRange" Method="IsDateRange" HelpText="The date must be between 01-01-1980 and today.">
    <Parameters>
      <Parameter Id="Minimum">1980-01-01</Parameter>
      <Parameter Id="Maximum">Today</Parameter>
    </Parameters>
  </Predicate>
</Predicates>

Добавьте предикатValidation со ссылкой на DateRange предикат.

<PredicateValidations>
  <PredicateValidation Id="CustomDateRange">
    <PredicateGroups>
      <PredicateGroup Id="DateRangeGroup">
        <PredicateReferences>
          <PredicateReference Id="DateRange" />
        </PredicateReferences>
      </PredicateGroup>
    </PredicateGroups>
  </PredicateValidation>
</PredicateValidations>

В типе утверждения добавьте элемент PredicateValidationReference и укажите идентификатор как CustomDateRange.

<ClaimType Id="dateOfBirth">
  <DisplayName>Date of Birth</DisplayName>
  <DataType>date</DataType>
  <AdminHelpText>The user's date of birth.</AdminHelpText>
  <UserHelpText>Your date of birth.</UserHelpText>
  <UserInputType>DateTimeDropdown</UserInputType>
  <PredicateValidationReference Id="CustomDateRange" />
</ClaimType>

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