Бөлісу құралы:


Элементы Predicates и PredicateValidations

Примечание.

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

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

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

Схема, на которой показана связь между Predicates и PredicateValidations

Предикаты

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

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

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

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

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

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

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

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

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

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

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

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

Методы Predicate

IsLengthRange

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

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

В следующем примере показан метод 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 проверяет, соответствует ли строковое значение утверждения регулярному выражению. Ознакомьтесь с предлагаемым способом в Живой демонстрации. Элемент предиката поддерживает следующие параметры:

Параметр Обязательное поле Описание
RegularExpression Да Шаблон регулярного выражения для сопоставления.

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

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

IncludesCharacters

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

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

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

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

IsDateRange

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

Параметр Обязательное поле Описание
Максимум Да Максимальная дата, которую можно указать. Формат даты соответствует соглашению 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>

PredicateValidations

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • IsLengthBetween8And64 с помощью метода IsLengthRange проверяет, содержит ли пароль от 8 до 64 знаков.
  • Lowercase с помощью метода IncludesCharacters проверяет, содержит ли пароль строчную букву.
  • Uppercase с помощью метода IncludesCharacters проверяет, содержит ли пароль прописную букву.
  • Number с помощью метода IncludesCharacters проверяет, содержит ли пароль цифру.
  • Symbol с помощью метода IncludesCharacters проверяет, содержит ли пароль один из нескольких символов.
  • PIN с помощью метода MatchesRegex проверяет, содержит ли пароль только цифры.
  • AllowedAADCharacters с помощью метода MatchesRegex проверяет, используются ли в пароле только допустимые знаки.
  • DisallowedWhitespace с помощью метода MatchesRegex проверяет, не начинается или не заканчивается ли пароль пробелом.
<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 выполняет проверки DisallowedWhitespace, AllowedAADCharacters и IsLengthBetween8And64.
  • StrongPassword выполняет проверки DisallowedWhitespace, AllowedAADCharacters и IsLengthBetween8And64. Последняя группа CharacterClasses выполняет дополнительный набор предикатов с параметром MatchAtLeast со значением 3. Пароль пользователя должен содержать от 8 до 16 знаков и три из следующих знаков: строчная, прописная буква, цифра или символ.
  • CustomPassword выполняет только проверки DisallowedWhitespace и 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 с использованием DateTimeDropdown. Чтобы сделать это, создайте Predicate с методом 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>

Добавьте PredicateValidation со ссылкой на предикат 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>

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