Partilhar via


Predicados e PredicadosValidações

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 nas nossas Perguntas Frequentes.

Observação

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 a utilização dos fluxos de utilizador incorporados. 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 Descrição
Predicado 1:n Uma lista de predicados.

O elemento Predicado 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.
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 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 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 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 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 Obrigatório Descrição
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 Obrigatório Descrição
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 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 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 Descrição
PredicateValidation 1:n Uma lista de validação de predicados.

O elemento PredicateValidation contém o seguinte atributo:

Atributo Obrigató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 Descrição
PredicateGroups 1:n Uma lista de grupos de predicados.

O elemento PredicateGroups contém o seguinte elemento:

Elemento Ocorrências Descrição
PredicateGroup 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 devem digitar.
PredicadoReferências 1:n Uma lista de referências de predicados.

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