Compartilhar via


Predicados e PredicateValidations

Importante

A partir de 1º de maio de 2025, o Azure AD B2C não estará mais disponível para compra para novos clientes. Saiba mais em nossas perguntas frequentes.

Observação

No Azure Active Directory B2C, as políticas personalizadas são projetadas principalmente para tratar de cenários complexos. Para a maioria dos cenários, recomendamos que você use fluxos de usuários predefinidos. Se você ainda não fez isso, saiba mais sobre o pacote de início de política personalizado em Introdução às políticas personalizadas no Active Directory B2C.

Os elementos Predicates 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 AD B2C (Azure Active Directory B2C).

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

Diagrama mostrando predicados e relação de validações de predicado

Predicados

O elemento Predicate 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 da linguagem.

O elemento Predicates deve aparecer diretamente seguindo o elemento ClaimsSchema dentro do elemento BuildingBlocks .

O elemento Predicates contém o seguinte elemento:

Elemento Ocorrências Descrição
Predicado 1:n Uma lista de predicados.

O elemento Predicate contém os seguintes atributos:

Atributo Obrigató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.
Texto de Ajuda 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 Predicate contém os seguintes elementos:

Elemento Ocorrências Descrição
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 Descrição
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 Descrição
ID 1:1 O identificador do parâmetro.

Métodos de predicado

ÉComprimentoIntervalo

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 predicado. O elemento predicado dá suporte aos seguintes parâmetros:

Parâmetro Obrigatório Descrição
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 e Minimum que especifica o intervalo de comprimento da cadeia de caracteresMaximum:

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

CorrespondênciasRegex

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 predicado. O elemento predicado dá suporte aos seguintes parâmetros:

Parâmetro Obrigatório Descrição
Expressão Regular 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 predicado. O elemento predicado dá suporte aos seguintes parâmetros:

Parâmetro Obrigatório Descrição
Conjunto de Carateres Sim O conjunto de caracteres que podem ser inseridos. Por exemplo, caracteres a-zminúsculos, caracteres A-Zmaiúsculos, dígitos 0-9ou 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>

ÉDataIntervalo

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 predicado. O elemento predicado dá suporte aos seguintes parâmetros:

Parâmetro Obrigatório Descrição
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 especifica 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>

PredicateValidations

Enquanto os predicados definem a validação para verificar em relação a um tipo de declaração, o PredicateValidations agrupa um conjunto de predicados para formar uma validação de entrada de 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 todo o PredicateGroup com o conjunto de elementos PredicateReference .

O elemento PredicateValidations deve aparecer diretamente seguindo 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 Descrição
PredicateValidation 1:n Uma lista de validação de predicado.

O elemento PredicateValidation contém o seguinte atributo:

Atributo Obrigatório Descrição
ID Sim Um identificador usado para a validação do predicado. O elemento ClaimType pode usar esse identificador na política.

O elemento PredicateValidation contém o seguinte elemento:

Elemento Ocorrências Descrição
Grupos de Predicados 1:n Uma lista de grupos de predicados.

O elemento PredicateGroups contém o seguinte elemento:

Elemento Ocorrências Descrição
Grupo de Predicados 1:n Uma lista de predicados.

O elemento PredicateGroup contém o seguinte atributo:

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

O elemento PredicateGroup contém os seguintes elementos:

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

O elemento PredicateReferences contém os seguintes atributos:

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

O elemento PredicateReferences contém os seguintes elementos:

Elemento Ocorrências Descrição
PredicadoReferência 1:n Uma referência a um predicado.

O elemento PredicateReference contém os seguintes atributos:

Atributo Obrigatório Descrição
ID Sim Um identificador usado para a validação do predicado.

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.
  • Em letras minúsculas usando o IncludesCharacters método, valida que a senha contém uma letra minúscula.
  • 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.
  • Símbolo usando o IncludesCharacters método, valida que a senha contém um dos vários caracteres de símbolo.
  • O PIN que usa o MatchesRegex método valida que a senha contém apenas números.
  • AllowedAADCharacters usando o MatchesRegex método valida que a senha somente o caractere inválido foi fornecido.
  • O 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 o DisallowedWhitespace, AllowedAADCharacters e IsLengthBetween8And64
  • StrongPassword valida o 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úscula, Maiúscula, Número ou Símbolo.
  • CustomPassword valida apenas DisallowedWhitespace, AllowedAADCharacters. Portanto, 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 predicado, 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>

O seguinte 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 PredicateGroup

Configurar um intervalo de datas

Com os predicados e os elementos PredicateValidations , você pode controlar os valores mínimos e máximos de data do UserInputType usando um DateTimeDropdown. 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óximas etapas