Udostępnij za pośrednictwem


Predykaty i PredykateValidations

Uwaga

W usłudze Azure Active Directory B2C zasady niestandardowe są przeznaczone głównie do rozwiązywania złożonych scenariuszy. W przypadku większości scenariuszy zalecamy używanie wbudowanych przepływów użytkownika. Jeśli nie zostało to zrobione, dowiedz się więcej o niestandardowym pakiecie startowym zasad w temacie Wprowadzenie do zasad niestandardowych w usłudze Active Directory B2C.

Elementy Predykates i PredicateValidations umożliwiają przeprowadzenie procesu weryfikacji w celu zapewnienia, że tylko prawidłowo sformułowane dane są wprowadzane do dzierżawy usługi Azure Active Directory B2C (Azure AD B2C).

Na poniższym diagramie przedstawiono relację między elementami:

Diagram przedstawiający relację Predykates i Predykate Validations

Predykaty

Element Predykate definiuje podstawową walidację, aby sprawdzić wartość typu oświadczenia i zwraca true wartość lub false. Walidacja odbywa się przy użyciu określonego elementu Metoda i zestawu elementów parametrów odpowiednich dla metody. Na przykład predykat może sprawdzić, czy długość wartości oświadczenia ciągu mieści się w zakresie parametrów minimalnych i maksymalnych, czy wartość oświadczenia ciągu zawiera zestaw znaków. Element UserHelpText zawiera komunikat o błędzie dla użytkowników, jeśli sprawdzanie nie powiedzie się. Wartość elementu UserHelpText można lokalizować przy użyciu dostosowywania języka.

Element Predykates musi pojawić się bezpośrednio po elemecie ClaimsSchema w elemecie BuildingBlocks .

Element Predykates zawiera następujący element:

Element Wystąpień opis
Predykat 1:n Lista predykatów.

Element Predykate zawiera następujące atrybuty:

Atrybut Wymagania Opis
Id Tak Identyfikator używany dla predykatu. Inne elementy mogą używać tego identyfikatora w zasadach.
Method Tak Typ metody do użycia do weryfikacji. Możliwe wartości: IsLengthRange, MatchesRegex, IncludesCharacters lub IsDateRange.
Helptext Nie. Komunikat o błędzie dla użytkowników, jeśli sprawdzanie nie powiedzie się. Ten ciąg można lokalizować przy użyciu dostosowywania języka

Element Predykate zawiera następujące elementy:

Element Wystąpień opis
UserHelpText 0:1 (Przestarzałe) Komunikat o błędzie dla użytkowników, jeśli sprawdzanie nie powiedzie się.
Parametry 1:1 Parametry dla typu metody weryfikacji ciągu.

Element Parameters zawiera następujące elementy:

Element Wystąpień opis
Parametr 1:n Parametry dla typu metody weryfikacji ciągu.

Element Parametr zawiera następujące atrybuty:

Element Wystąpień opis
Id 1:1 Identyfikator parametru.

Metody predykatu

IsLengthRange

Metoda IsLengthRange sprawdza, czy długość wartości oświadczenia ciągu mieści się w zakresie minimalnych i maksymalnych parametrów określonych. Zapoznaj się z pokazem live tej metody predykatu. Element predykate obsługuje następujące parametry:

Parametr Wymagania opis
Maksymalnie Tak Maksymalna liczba znaków, które można wprowadzić.
Minimum Tak Minimalna liczba znaków, które należy wprowadzić.

W poniższym przykładzie przedstawiono metodę IsLengthRange z parametrami Minimum i Maximum określającą zakres długości ciągu:

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

DopasowaniaRegex

Metoda MatchesRegex sprawdza, czy wartość oświadczenia ciągu jest zgodna z wyrażeniem regularnym. Zapoznaj się z pokazem live tej metody predykatu. Element predykate obsługuje następujące parametry:

Parametr Wymagania opis
RegularExpression Tak Wzorzec wyrażenia regularnego do dopasowania.

W poniższym przykładzie przedstawiono metodę MatchesRegex z parametrem RegularExpression określającym wyrażenie regularne:

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

IncludesCharacters

Metoda IncludesCharacters sprawdza, czy wartość oświadczenia ciągu zawiera zestaw znaków. Zapoznaj się z pokazem live tej metody predykatu. Element predykate obsługuje następujące parametry:

Parametr Wymagania opis
Characterset Tak Zestaw znaków, które można wprowadzić. Na przykład małe litery a-z, wielkie litery A-Z, cyfry 0-9lub lista symboli, takich jak @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

W poniższym przykładzie przedstawiono metodę IncludesCharacters z parametrem CharacterSet określającym zestaw znaków:

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

IsDateRange

Metoda IsDateRange sprawdza, czy wartość oświadczenia daty mieści się między określonym zakresem minimalnych i maksymalnych parametrów. Zapoznaj się z pokazem live tej metody predykatu. Element predykate obsługuje następujące parametry:

Parametr Wymagania opis
Maksymalnie Tak Największa możliwa data, którą można wprowadzić. Format daty jest zgodny yyyy-mm-dd z konwencją lub Today.
Minimum Tak Najmniejsza możliwa data, którą można wprowadzić. Format daty jest zgodny yyyy-mm-dd z konwencją lub Today.

W poniższym przykładzie przedstawiono metodę IsDateRange z parametrami Minimum i Maximum określającą zakres dat w formacie yyyy-mm-dd i 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>

PredykateValidations

Podczas gdy predykaty definiują walidację w celu sprawdzenia typu oświadczenia, predykateValidations grupują zestaw predykatów w celu utworzenia weryfikacji danych wejściowych użytkownika, które można zastosować do typu oświadczenia. Każdy element PredicateValidation zawiera zestaw elementów PredykateGroup , które zawierają zestaw elementów PredicateReference wskazujących predykat. Aby przejść walidację, wartość oświadczenia powinna przejść wszystkie testy dowolnego predykatu we wszystkich predykatach PredykateGroup z ich zestawem elementów PredicateReference .

Element PredicateValidations musi pojawić się bezpośrednio po elemecie Predykates w elemecie BuildingBlocks .

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

Element PredicateValidations zawiera następujący element:

Element Wystąpień opis
PredykatValidation 1:n Lista weryfikacji predykatu.

Element PredicateValidation zawiera następujący atrybut:

Atrybut Wymagania Opis
Id Tak Identyfikator używany do weryfikacji predykatu. Element ClaimType może używać tego identyfikatora w zasadach.

Element PredicateValidation zawiera następujący element:

Element Wystąpień opis
PredykateGroups 1:n Lista grup predykatów.

Element PredicateGroups zawiera następujący element:

Element Wystąpień opis
PredykateGroup 1:n Lista predykatów.

Element PredicateGroup zawiera następujący atrybut:

Atrybut Wymagania Opis
Id Tak Identyfikator używany dla grupy predykatu.

Element PredicateGroup zawiera następujące elementy:

Element Wystąpień opis
UserHelpText 0:1 Opis predykatu, który może być przydatny dla użytkowników, aby wiedzieć, jaką wartość powinni wpisać.
PredykateReferences 1:n Lista odwołań predykatów.

Element PredicateReferences zawiera następujące atrybuty:

Atrybut Wymagania opis
MatchAtLeast Nie. Określa, że wartość musi być zgodna z co najmniej tylu definicjami predykatów, aby dane wejściowe zostały zaakceptowane. Jeśli nie zostanie określona, wartość musi być zgodna ze wszystkimi definicjami predykatu.

Element PredicateReferences zawiera następujące elementy:

Element Wystąpień opis
PredykatReference 1:n Odwołanie do predykatu.

Element PredicateReference zawiera następujące atrybuty:

Atrybut Wymagania Opis
Id Tak Identyfikator używany do weryfikacji predykatu.

Konfigurowanie złożoności hasła

Dzięki predykatom i predykatomValidationsInput możesz kontrolować wymagania dotyczące złożoności haseł udostępnianych przez użytkownika podczas tworzenia konta. Domyślnie usługa Azure AD B2C używa silnych haseł. Usługa Azure AD B2C obsługuje również opcje konfiguracji w celu kontrolowania złożoności haseł, których klienci mogą używać. Złożoność hasła można zdefiniować przy użyciu tych elementów predykatu:

  • IsLengthBetween8And64 przy użyciu IsLengthRange metody sprawdza, czy hasło musi zawierać od 8 do 64 znaków.
  • Małe litery przy użyciu IncludesCharacters metody sprawdza, czy hasło zawiera małą literę.
  • Wielkie litery przy użyciu IncludesCharacters metody sprawdza, czy hasło zawiera wielką literę.
  • Numer przy użyciu IncludesCharacters metody sprawdza, czy hasło zawiera cyfrę.
  • Symbol przy użyciu IncludesCharacters metody sprawdza, czy hasło zawiera jeden z kilku znaków symboli.
  • Numer PIN przy użyciu MatchesRegex metody sprawdza, czy hasło zawiera tylko liczby.
  • AllowedAADCharacters przy użyciu MatchesRegex metody sprawdza, czy podano tylko nieprawidłowy znak hasła.
  • NiedozwoloneWhitespace przy użyciu MatchesRegex metody sprawdza, czy hasło nie zaczyna się ani nie kończy znakiem odstępu.
<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>

Po zdefiniowaniu podstawowych weryfikacji można połączyć je razem i utworzyć zestaw zasad haseł, których można użyć w zasadach:

  • SimplePassword weryfikuje niedozwoloneWhitespace, AllowedAADCharacters i IsLengthBetween8And64
  • StrongPassword weryfikuje NiedozwoloneWhitespace, AllowedAADCharacters, IsLengthBetween8And64. Ostatnia grupa CharacterClasses uruchamia dodatkowy zestaw predykatów z MatchAtLeast ustawionym na 3. Hasło użytkownika musi zawierać od 8 do 16 znaków, a trzy z następujących znaków: Małe litery, Wielkie litery, Liczba lub Symbol.
  • Element CustomPassword weryfikuje tylko niedozwoloneWhitespace, AllowedAADCharacters. Dlatego użytkownik może podać dowolne hasło o dowolnej długości, o ile znaki są prawidłowe.
<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>

W typie oświadczenia dodaj element PredicateValidationReference i określ identyfikator jako jeden z predykatów weryfikacji, takich jak SimplePassword, StrongPassword lub 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>

Poniżej przedstawiono sposób organizowania elementów, gdy usługa Azure AD B2C wyświetla komunikat o błędzie:

Diagram przedstawiający przykład złożoności hasła predykatu i grupy PredicateGroup

Konfigurowanie zakresu dat

Za pomocą elementów Predykates i PredicateValidations można kontrolować minimalne i maksymalne wartości daty parametru UserInputType przy użyciu elementu DateTimeDropdown. W tym celu utwórz predykat z IsDateRange metodą i podaj minimalne i maksymalne parametry.

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

Dodaj predykatValidation z odwołaniem do DateRange predykatu.

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

W typie oświadczenia dodaj element PredicateValidationReference i określ identyfikator jako 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>

Następne kroki