Predicados e PredicadosValidações

Nota

No Azure Ative Directory B2C, as políticas personalizadas são projetadas principalmente para lidar com cenários complexos. Para a maioria dos cenários, recomendamos que você use fluxos de usuário internos. Se você não tiver feito isso, saiba mais sobre o pacote inicial de políticas personalizadas em Introdução às políticas personalizadas no Ative Directory B2C.

Os elementos Predicados e PredicateValidations permitem que você execute um processo de validação para garantir que apenas dados formados corretamente sejam inseridos em seu locatário do Azure Ative Directory B2C (Azure AD B2C).

O diagrama a seguir mostra a relação entre os elementos:

Diagrama mostrando a relação Predicados e Validações de Predicados

Predicados

O elemento Predicado define uma validação básica para verificar o valor de um tipo de declaração e retorna true ou false. A validação é feita usando um elemento Method especificado e um conjunto de elementos Parameter relevantes para o método. Por exemplo, um predicado pode verificar se o comprimento de um valor de declaração de cadeia de caracteres está dentro do intervalo de parâmetros mínimos e máximos especificados ou se um valor de declaração de cadeia de caracteres contém um conjunto de caracteres. O elemento UserHelpText fornece uma mensagem de erro para os usuários se a verificação falhar. O valor do elemento UserHelpText pode ser localizado usando a personalização do idioma.

O elemento Predicados deve aparecer diretamente após o elemento ClaimsSchema dentro do elemento BuildingBlocks .

O elemento Predicados contém o seguinte elemento :

Elemento Ocorrências Description
Predicado 1:n Uma lista de predicados.

O elemento Predicado contém os seguintes atributos:

Atributo Necessário Descrição
ID Sim Um identificador usado para o predicado. Outros elementos podem usar esse identificador na política.
Método Sim O tipo de método a ser usado para validação. Valores possíveis: IsLengthRange, MatchesRegex, IncludesCharacters ou IsDateRange.
HelpText Não Uma mensagem de erro para os usuários se a verificação falhar. Essa cadeia de caracteres pode ser localizada usando a personalização do idioma

O elemento Predicado contém os seguintes elementos:

Elemento Ocorrências Description
UserHelpText 0:1 (Preterido) Uma mensagem de erro para os usuários se a verificação falhar.
Parâmetros 1:1 Os parâmetros para o tipo de método da validação de cadeia de caracteres.

O elemento Parameters contém os seguintes elementos:

Elemento Ocorrências Description
Parâmetro 1:n Os parâmetros para o tipo de método da validação de cadeia de caracteres.

O elemento Parameter contém os seguintes atributos:

Elemento Ocorrências Description
ID 1:1 O identificador do parâmetro.

Métodos de predicados

IsLengthRange

O método IsLengthRange verifica se o comprimento de um valor de declaração de cadeia de caracteres está dentro do intervalo de parâmetros mínimos e máximos especificados. Confira a demonstração ao vivo deste método de predicados. O elemento predicado suporta os seguintes parâmetros:

Parâmetro Necessário Description
Máximo Sim O número máximo de caracteres que podem ser inseridos.
Mínimo Sim O número mínimo de caracteres que devem ser inseridos.

O exemplo a seguir mostra um método IsLengthRange com os parâmetros Minimum e Maximum que especificam o intervalo de comprimento da cadeia de caracteres:

<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

O método MatchesRegex verifica se um valor de declaração de cadeia de caracteres corresponde a uma expressão regular. Confira a demonstração ao vivo deste método de predicados. O elemento predicado suporta os seguintes parâmetros:

Parâmetro Necessário Description
RegularExpression Sim O padrão de expressão regular a ser correspondido.

O exemplo a seguir mostra um MatchesRegex método com o parâmetro RegularExpression que especifica uma expressão regular:

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

IncluiPersonagens

O método IncludesCharacters verifica se um valor de declaração de cadeia de caracteres contém um conjunto de caracteres. Confira a demonstração ao vivo deste método de predicados. O elemento predicado suporta os seguintes parâmetros:

Parâmetro Necessário Description
Conjunto de caracteres Sim O conjunto de caracteres que podem ser inseridos. Por exemplo, caracteres a-zminúsculos , caracteres A-Zmaiúsculos 0-9, dígitos ou uma lista de símbolos, como @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

O exemplo a seguir mostra um IncludesCharacters método com o parâmetro CharacterSet que especifica o conjunto de caracteres:

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

IsDateRange

O método IsDateRange verifica se um valor de declaração de data está entre um intervalo de parâmetros mínimos e máximos especificados. Confira a demonstração ao vivo deste método de predicados. O elemento predicado suporta os seguintes parâmetros:

Parâmetro Necessário Description
Máximo Sim A maior data possível que pode ser inserida. O formato da data segue yyyy-mm-dd a convenção, ou Today.
Mínimo Sim A menor data possível que pode ser inserida. O formato da data segue yyyy-mm-dd a convenção, ou Today.

O exemplo a seguir mostra um IsDateRange método com os parâmetros Minimum e Maximum que especificam o intervalo de datas com um formato de yyyy-mm-dd e 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>

PredicadoValidações

Enquanto os predicados definem a validação para verificar em relação a um tipo de declaração, o grupo PredicateValidations agrupa um conjunto de predicados para formar uma validação de entrada do usuário que pode ser aplicada a um tipo de declaração. Cada elemento PredicateValidation contém um conjunto de elementos PredicateGroup que contêm um conjunto de elementos PredicateReference que aponta para um Predicado. Para passar na validação, o valor da declaração deve passar em todos os testes de qualquer predicado em todos os PredicateGroup com seu conjunto de elementos PredicateReference .

O elemento PredicateValidations deve aparecer diretamente após o elemento Predicados dentro do elemento BuildingBlocks .

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

O elemento PredicateValidations contém o seguinte elemento:

Elemento Ocorrências Description
PredicateValidation 1:n Uma lista de validação de predicados.

O elemento PredicateValidation contém o seguinte atributo:

Atributo Necessário Descrição
ID Sim Um identificador usado para a validação de predicados. O elemento ClaimType pode usar esse identificador na política.

O elemento PredicateValidation contém o seguinte elemento :

Elemento Ocorrências Description
PredicateGroups 1:n Uma lista de grupos de predicados.

O elemento PredicateGroups contém o seguinte elemento:

Elemento Ocorrências Description
PredicateGroup 1:n Uma lista de predicados.

O elemento PredicateGroup contém o seguinte atributo:

Atributo Necessário Descrição
ID Sim Um identificador usado para o grupo de predicados.

O elemento PredicateGroup contém os seguintes elementos:

Elemento Ocorrências Description
UserHelpText 0:1 Uma descrição do predicado que pode ser útil para os usuários saberem qual valor devem digitar.
PredicadoReferências 1:n Uma lista de referências de predicados.

O elemento PredicateReferences contém os seguintes atributos:

Atributo Necessário Description
MatchAtLeast Não Especifica que o valor deve corresponder pelo menos a muitas definições de predicados para que a entrada seja aceita. Se não for especificado, o valor deve corresponder a todas as definições de predicados.

O elemento PredicateReferences contém os seguintes elementos:

Elemento Ocorrências Description
PredicadoReferência 1:n Uma referência a um predicado.

O elemento PredicateReference contém os seguintes atributos:

Atributo Necessário Descrição
ID Sim Um identificador usado para a validação de predicados.

Configurar a complexidade da senha

Com Predicados e PredicateValidationsInput , você pode controlar os requisitos de complexidade para senhas fornecidas por um usuário ao criar uma conta. Por padrão, o Azure AD B2C usa senhas fortes. O Azure AD B2C também dá suporte a opções de configuração para controlar a complexidade das senhas que os clientes podem usar. Você pode definir a complexidade da senha usando estes elementos de predicado:

  • IsLengthBetween8And64 usando o IsLengthRange método, valida que a senha deve ter entre 8 e 64 caracteres.
  • Uso de minúsculas usando o IncludesCharacters método, valida que a senha contém uma letra minúscula.
  • Em maiúsculas usando o IncludesCharacters método, valida que a senha contém uma letra maiúscula.
  • Número usando o IncludesCharacters método, valida que a senha contém um dígito.
  • Symbol usando o IncludesCharacters método, valida que a senha contém um dos vários caracteres de símbolo.
  • PIN usando o MatchesRegex método, valida que a senha contém apenas números.
  • AllowedAADCharacters usando o MatchesRegex método, valida que a senha apenas caractere inválido foi fornecido.
  • DisallowedWhitespace usando o MatchesRegex método, valida que a senha não começa ou termina com um caractere de espaço em branco.
<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>

Depois de definir as validações básicas, você pode combiná-las e criar um conjunto de políticas de senha que você pode usar em sua política:

  • SimplePassword valida DisallowedWhitespace, AllowedAADCharacters e IsLengthBetween8And64
  • StrongPassword valida DisallowedWhitespace, AllowedAADCharacters, IsLengthBetween8And64. O último grupo CharacterClasses executa um conjunto adicional de predicados com MatchAtLeast definido como 3. A senha do usuário deve ter entre 8 e 16 caracteres e três dos seguintes caracteres: minúsculas, maiúsculas, número ou símbolo.
  • CustomPassword valida apenas DisallowedWhitespace, AllowedAADCharacters. Assim, o usuário pode fornecer qualquer senha com qualquer comprimento, desde que os caracteres sejam válidos.
<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>

No tipo de declaração, adicione o elemento PredicateValidationReference e especifique o identificador como uma das validações de predicados, como SimplePassword, StrongPassword ou 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>

A seguir mostra como os elementos são organizados quando o Azure AD B2C exibe a mensagem de erro:

Exemplo de complexidade de senha de Predicado e Predicado

Configurar um intervalo de datas

Com os elementos Predicados e PredicateValidations , você pode controlar os valores de data mínima e máxima do UserInputType usando um DateTimeDropdownarquivo . Para fazer isso, crie um Predicado com o IsDateRange método e forneça os parâmetros mínimo e máximo.

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

Adicione um PredicateValidation com uma referência ao DateRange predicado.

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

No tipo de declaração, adicione o elemento PredicateValidationReference e especifique o identificador como 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>

Próximos passos