Compartir a través de


Predicados y PredicateValidations

Importante

A partir del 1 de mayo de 2025, Azure AD B2C ya no estará disponible para la compra por parte de nuevos clientes. Obtenga más información en nuestras preguntas más frecuentes.

Nota:

En Azure Active Directory B2C, las directivas personalizadas se han diseñado principalmente para abordar escenarios complejos. Para la mayoría de los escenarios, se recomienda usar flujos de usuario integrados. Si no lo ha hecho, obtenga información sobre el paquete de inicio de directivas personalizadas en Introducción a las directivas personalizadas en Active Directory B2C.

Los elementos Predicates y PredicateValidations permiten realizar un proceso de validación para asegurarse de que solo se especifican los datos con el formato correcto en el inquilino de Azure Active Directory B2C (Azure AD B2C).

El siguiente diagrama muestra la relación entre los elementos:

Diagrama que muestra la relación de predicados y validaciones de predicados

Predicados

El elemento Predicate define una validación básica para comprobar el valor de un tipo de notificación y devuelve true o false. La validación se realiza mediante un elemento Method especificado y un conjunto de elementos Parameter relevantes para el método. Por ejemplo, un predicado puede comprobar si la longitud de un valor de notificación de cadena está dentro del intervalo de parámetros mínimo y máximo especificados, o si un valor de notificación de cadena contiene un juego de caracteres. El elemento UserHelpText proporciona un mensaje de error para los usuarios si se produce un error en la comprobación. El valor del elemento UserHelpText se puede localizar mediante la personalización del idioma.

El elemento Predicates debe aparecer directamente después del elemento ClaimsSchema dentro del elemento BuildingBlocks .

El elemento Predicates contiene el siguiente elemento:

Elemento Repeticiones Descripción
Predicado 1:n Una lista de predicados.

El elemento Predicate contiene los siguientes atributos:

Atributo Obligatorio Descripción
Identificación Identificador que se usa para el predicado. Hay otros elementos que pueden usar este identificador en la directiva.
Método Tipo de método que se va a utilizar para la validación. Valores posibles: IsLengthRange, MatchesRegex, IncludesCharacters o IsDateRange.
Texto de ayuda No Un mensaje de error para los usuarios si se produce un error en la comprobación. Esta cadena se puede localizar mediante la personalización del idioma

El elemento Predicate contiene los siguientes elementos:

Elemento Repeticiones Descripción
UserHelpText 0:1 (En desuso) Un mensaje de error para los usuarios si se produce un error en la comprobación.
Parámetros 1:1 Los parámetros para el tipo de método de la validación de cadena.

El elemento Parameters contiene los siguientes elementos:

Elemento Repeticiones Descripción
Parámetro 1:n Los parámetros para el tipo de método de la validación de cadena.

El elemento Parameter contiene los siguientes atributos:

Elemento Repeticiones Descripción
Identificación 1:1 Identificador del parámetro.

Métodos de predicado

IsLengthRange

El método IsLengthRange comprueba si la longitud de un valor de notificación de cadena está dentro del intervalo de parámetros mínimo y máximo especificados. Echa un vistazo a la demostración en vivo de este método de predicado. El elemento predicate admite los siguientes parámetros:

Parámetro Obligatorio Descripción
Máxima El número máximo de caracteres que se pueden introducir.
Mínimo El número mínimo de caracteres que se deben introducir.

En el ejemplo siguiente se muestra un método IsLengthRange con los parámetros Minimum y Maximum que especifican el intervalo de longitud de la cadena:

<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

El método MatchesRegex comprueba si un valor de notificación de cadena coincide con una expresión regular. Echa un vistazo a la demostración en vivo de este método de predicado. El elemento predicate admite los siguientes parámetros:

Parámetro Obligatorio Descripción
RegularExpression Patrón de expresión regular que debe coincidir.

En el ejemplo siguiente se muestra un MatchesRegex método con el parámetro RegularExpression que especifica una expresión regular:

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

IncluyeCaracteres

El método IncludesCharacters comprueba si un valor de notificación de cadena contiene un juego de caracteres. Echa un vistazo a la demostración en vivo de este método de predicado. El elemento predicate admite los siguientes parámetros:

Parámetro Obligatorio Descripción
Conjunto de caracteres El conjunto de caracteres que se pueden introducir. Por ejemplo, caracteres a-zen minúsculas , caracteres A-Zen mayúsculas , dígitos 0-9o una lista de símbolos, como @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

En el ejemplo siguiente se muestra un IncludesCharacters método con el parámetro CharacterSet que especifica el conjunto de caracteres:

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

IsDateRange

El método IsDateRange comprueba si un valor de notificación de fecha se encuentra entre un intervalo de parámetros mínimo y máximo especificados. Echa un vistazo a la demostración en vivo de este método de predicado. El elemento predicate admite los siguientes parámetros:

Parámetro Obligatorio Descripción
Máxima La fecha más grande posible que se puede ingresar. El formato de la fecha sigue yyyy-mm-dd la convención, o Today.
Mínimo La fecha más pequeña posible que se puede ingresar. El formato de la fecha sigue yyyy-mm-dd la convención, o Today.

En el ejemplo siguiente se muestra un IsDateRange método con los parámetros Minimum y Maximum que especifica el intervalo de fechas con un formato de yyyy-mm-dd y 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

Mientras que los predicados definen la validación que se va a comprobar con un tipo de notificación, PredicateValidations agrupa un conjunto de predicados para formar una validación de entrada de usuario que se puede aplicar a un tipo de notificación. Cada elemento PredicateValidation contiene un conjunto de elementos PredicateGroup que contienen un conjunto de elementos PredicateReference que apuntan a un Predicate. Para pasar la validación, el valor de la notificación debe pasar todas las pruebas de cualquier predicado en todo el PredicateGroup con su conjunto de elementos PredicateReference .

El elemento PredicateValidations debe aparecer directamente después del elemento Predicates dentro del elemento BuildingBlocks .

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

El elemento PredicateValidations contiene el siguiente elemento:

Elemento Repeticiones Descripción
PredicateValidation 1:n Una lista de validación de predicados.

El elemento PredicateValidation contiene el siguiente atributo:

Atributo Obligatorio Descripción
Identificación Identificador que se usa para la validación de predicados. El elemento ClaimType puede usar este identificador en la directiva.

El elemento PredicateValidation contiene el siguiente elemento:

Elemento Repeticiones Descripción
PredicateGroups 1:n Una lista de grupos de predicados.

El elemento PredicateGroups contiene el siguiente elemento:

Elemento Repeticiones Descripción
PredicateGroup 1:n Una lista de predicados.

El elemento PredicateGroup contiene el siguiente atributo:

Atributo Obligatorio Descripción
Identificación Identificador que se usa para el grupo de predicados.

El elemento PredicateGroup contiene los siguientes elementos:

Elemento Repeticiones Descripción
UserHelpText 0:1 Una descripción del predicado que puede ser útil para que los usuarios sepan qué valor deben escribir.
PredicadoReferencias 1:n Una lista de referencias de predicados.

El elemento PredicateReferences contiene los siguientes atributos:

Atributo Obligatorio Descripción
MatchAtLeast (CoincidenciaAl Menos) No Especifica que el valor debe coincidir al menos con ese número de definiciones de predicado para que se acepte la entrada. Si no se especifica, el valor debe coincidir con todas las definiciones de predicado.

El elemento PredicateReferences contiene los siguientes elementos:

Elemento Repeticiones Descripción
PredicateReference 1:n Referencia a un predicado.

El elemento PredicateReference contiene los siguientes atributos:

Atributo Obligatorio Descripción
Identificación Identificador que se usa para la validación de predicados.

Configurar la complejidad de las contraseñas

Con Predicates y PredicateValidationsInput, puede controlar los requisitos de complejidad de las contraseñas proporcionadas por un usuario al crear una cuenta. De forma predeterminada, Azure AD B2C usa contraseñas seguras. Azure AD B2C también admite opciones de configuración para controlar la complejidad de las contraseñas que los clientes pueden usar. Puede definir la complejidad de la contraseña mediante estos elementos de predicado:

  • IsLengthBetween8And64 mediante el IsLengthRange método, valida que la contraseña debe tener entre 8 y 64 caracteres.
  • Con elIncludesCharacters método, valida que la contraseña contenga una letra minúscula.
  • Mayúsculas usando el IncludesCharacters método, valida que la contraseña contiene una letra mayúscula.
  • Número que utiliza el IncludesCharacters método, valida que la contraseña contiene un dígito.
  • Symbol mediante el IncludesCharacters método, valida que la contraseña contiene uno de varios caracteres de símbolo.
  • El PIN mediante el MatchesRegex método valida que la contraseña solo contenga números.
  • AllowedAADCharacters mediante el MatchesRegex método, valida que solo se proporcionó el carácter no válido de la contraseña.
  • DisallowedWhitespace mediante el MatchesRegex método, valida que la contraseña no comience ni termine con un carácter de espacio en blanco.
<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>

Después de definir las validaciones básicas, puede combinarlas y crear un conjunto de políticas de contraseñas que puede usar en su política:

  • SimplePassword valida DisallowedWhitespace, AllowedAADCharacters e IsLengthBetween8And64
  • StrongPassword valida DisallowedWhitespace, AllowedAADCharacters, IsLengthBetween8And64. El último grupo CharacterClasses ejecuta un conjunto adicional de predicados con MatchAtLeast set en 3. La contraseña de usuario debe tener entre 8 y 16 caracteres, y tres de los siguientes caracteres: minúsculas, mayúsculas, número o símbolo.
  • CustomPassword valida solo DisallowedWhitespace, AllowedAADCharacters. Por lo tanto, el usuario puede proporcionar cualquier contraseña con cualquier longitud, siempre que los caracteres sean 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>

En el tipo de notificación, agregue el elemento PredicateValidationReference y especifique el identificador como una de las validaciones de predicado, como SimplePassword, StrongPassword o 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 continuación se muestra cómo se organizan los elementos cuando Azure AD B2C muestra el mensaje de error:

Diagrama de ejemplo de complejidad de contraseña Predicate y PredicateGroup

Configurar un intervalo de fechas

Con los elementos Predicates y PredicateValidations , puede controlar los valores de fecha mínimos y máximos de UserInputType mediante un DateTimeDropdownarchivo . Para ello, cree un predicado con el IsDateRange método y proporcione los parámetros mínimo y 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>

Agregue un PredicateValidation con una referencia al DateRange predicado.

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

En el tipo de notificación, agregue el elemento PredicateValidationReference y especifique el 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>

Pasos siguientes