Condividi tramite


Predicati e PredicateValidations

Importante

A partire dal 1° maggio 2025, Azure AD B2C non sarà più disponibile per l'acquisto per i nuovi clienti. Altre informazioni sono disponibili nelle domande frequenti.

Annotazioni

In Azure Active Directory B2C i criteri personalizzati sono stati progettati principalmente per far fronte a scenari complessi. Per la maggior parte degli scenari, è consigliabile usare i flussi utente predefiniti. In caso contrario, vedere Introduzione ai criteri personalizzati in Active Directory B2C.

Gli elementi Predicates e PredicateValidations consentono di eseguire un processo di convalida per assicurarsi che nel tenant di Azure Active Directory B2C (Azure AD B2C) vengano immessi solo i dati correttamente formati.

Il diagramma seguente illustra la relazione tra gli elementi:

Diagramma che mostra la relazione Predicati e Convalida predicati

Predicati

L'elemento Predicate definisce una convalida di base per controllare il valore di un tipo di attestazione e restituisce true o false. La convalida viene eseguita utilizzando un elemento Method specificato e un set di elementi Parameter rilevanti per il metodo . Ad esempio, un predicato può verificare se la lunghezza di un valore di attestazione stringa rientra nell'intervallo di parametri minimo e massimo specificato o se un valore di attestazione stringa contiene un set di caratteri. Se il controllo ha esito negativo, l'elemento UserHelpText visualizza un messaggio di errore per gli utenti. Il valore dell'elemento UserHelpText può essere localizzato tramite la personalizzazione della lingua.

L'elemento Predicates deve essere visualizzato direttamente dopo l'elemento ClaimsSchema all'interno dell'elemento BuildingBlocks .

L'elemento Predicates contiene l'elemento seguente:

Elemento Occorrenze Descrizione
Predicato 1:n Elenco di predicati.

L'elemento Predicate contiene gli attributi seguenti:

Attributo Obbligatorio Descrizione
id Identificatore usato per il predicato. Altri elementi possono usare questo identificatore nei criteri.
Metodo Tipo di metodo da utilizzare per la convalida. Valori possibili: IsLengthRange, MatchesRegex, IncludesCharacters o IsDateRange.
Testo di aiuto NO Messaggio di errore per gli utenti se il controllo ha esito negativo. Questa stringa può essere localizzata usando la personalizzazione della lingua

L'elemento Predicate contiene gli elementi seguenti:

Elemento Occorrenze Descrizione
UserHelpText 0:1 (Deprecato) Messaggio di errore per gli utenti se il controllo ha esito negativo.
Parametri 1:1 Parametri per il tipo di metodo della convalida della stringa.

L'elemento Parameters contiene gli elementi seguenti:

Elemento Occorrenze Descrizione
Parametro 1:n Parametri per il tipo di metodo della convalida della stringa.

L'elemento Parameter contiene gli attributi seguenti:

Elemento Occorrenze Descrizione
id 1:1 Identificatore del parametro.

Metodi del predicato

IsLengthRange

Il metodo IsLengthRange controlla se la lunghezza di un valore di attestazione stringa rientra nell'intervallo di parametri minimo e massimo specificati. Vedere la demo live di questo metodo di predicato. L'elemento predicato supporta i parametri seguenti:

Parametro Obbligatorio Descrizione
Massimo Numero massimo di caratteri che è possibile immettere.
Requisiti minimi Numero minimo di caratteri da immettere.

L'esempio seguente mostra un metodo IsLengthRange con i parametri Minimum e Maximum che specifica l'intervallo di lunghezza della stringa:

<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

Il metodo MatchesRegex controlla se un valore di attestazione stringa corrisponde a un'espressione regolare. Vedere la demo live di questo metodo di predicato. L'elemento predicato supporta i parametri seguenti:

Parametro Obbligatorio Descrizione
RegularExpression Modello di espressione regolare da trovare in corrispondenza.

Nell'esempio seguente viene illustrato un MatchesRegex metodo con il parametro RegularExpression che specifica un'espressione regolare:

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

IncludesCharacters

Il metodo IncludesCharacters controlla se un valore di attestazione stringa contiene un set di caratteri. Vedere la demo live di questo metodo di predicato. L'elemento predicato supporta i parametri seguenti:

Parametro Obbligatorio Descrizione
Set di caratteri Set di caratteri che è possibile immettere. Ad esempio, caratteri minuscoli, caratteri a-zA-Zmaiuscoli, cifre 0-9o un elenco di simboli, ad esempio @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

Nell'esempio seguente viene illustrato un IncludesCharacters metodo con il parametro CharacterSet che specifica il set di caratteri:

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

IsDateRange

Il metodo IsDateRange controlla se un valore di attestazione di data è compreso tra un intervallo di parametri minimo e massimo specificato. Vedere la demo live di questo metodo di predicato. L'elemento predicato supporta i parametri seguenti:

Parametro Obbligatorio Descrizione
Massimo La data più grande possibile che può essere immessa. Il formato della data segue yyyy-mm-dd la convenzione o Today.
Requisiti minimi La data più piccola possibile che può essere immessa. Il formato della data segue yyyy-mm-dd la convenzione o Today.

Nell'esempio seguente viene illustrato un IsDateRange metodo con i Minimum parametri e Maximum che specificano l'intervallo di date con un formato e yyyy-mm-ddToday.

<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

Mentre i predicati definiscono la convalida per verificare in base a un tipo di attestazione, predicatiValidations raggruppano un set di predicati per formare una convalida di input utente che può essere applicata a un tipo di attestazione. Ogni elemento PredicateValidation contiene un set di elementi PredicateGroup che contengono un set di elementi PredicateReference che puntano a un predicato. Per superare la convalida, il valore dell'attestazione deve superare tutti i test di qualsiasi predicato in tutti i PredicateGroup con il set di elementi PredicateReference .

L'elemento PredicateValidations deve essere visualizzato direttamente dopo l'elemento Predicates all'interno dell'elemento BuildingBlocks .

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

L'elemento PredicateValidations contiene l'elemento seguente:

Elemento Occorrenze Descrizione
PredicateValidation 1:n Elenco di convalida del predicato.

L'elemento PredicateValidation contiene l'attributo seguente:

Attributo Obbligatorio Descrizione
id Identificatore usato per la convalida del predicato. L'elemento ClaimType può usare questo identificatore nei criteri.

L'elemento PredicateValidation contiene l'elemento seguente:

Elemento Occorrenze Descrizione
PredicateGroups 1:n Elenco di gruppi di predicati.

L'elemento PredicateGroups contiene l'elemento seguente:

Elemento Occorrenze Descrizione
PredicateGroup 1:n Elenco di predicati.

L'elemento PredicateGroup contiene l'attributo seguente:

Attributo Obbligatorio Descrizione
id Identificatore usato per il gruppo di predicati.

L'elemento PredicateGroup contiene gli elementi seguenti:

Elemento Occorrenze Descrizione
UserHelpText 0:1 Descrizione del predicato che può essere utile agli utenti per sapere quale valore deve digitare.
PredicateReferences 1:n Elenco di riferimenti al predicato.

L'elemento PredicateReferences contiene gli attributi seguenti:

Attributo Obbligatorio Descrizione
MatchAtLeast NO Specifica che il valore deve corrispondere almeno a molte definizioni di predicato per l'input da accettare. Se non specificato, il valore deve corrispondere a tutte le definizioni di predicato.

L'elemento PredicateReferences contiene gli elementi seguenti:

Elemento Occorrenze Descrizione
PredicateReference 1:n Riferimento a un predicato.

L'elemento PredicateReference contiene gli attributi seguenti:

Attributo Obbligatorio Descrizione
id Identificatore usato per la convalida del predicato.

Configurare la complessità delle password

Con Predicates e PredicateValidationsInput è possibile controllare i requisiti di complessità per le password fornite da un utente durante la creazione di un account. Per impostazione predefinita, Azure AD B2C usa password complesse. Azure AD B2C supporta anche opzioni di configurazione per controllare la complessità delle password che i clienti possono usare. È possibile definire la complessità delle password usando questi elementi del predicato:

  • IsLengthBetween8And64 usando il IsLengthRange metodo , verifica che la password sia compresa tra 8 e 64 caratteri.
  • Minuscolo usando il IncludesCharacters metodo , convalida che la password contenga una lettera minuscola.
  • Maiuscolo usando il IncludesCharacters metodo , convalida che la password contenga una lettera maiuscola.
  • Numero che usa il IncludesCharacters metodo , convalida che la password contenga una cifra.
  • Simbolo che usa il IncludesCharacters metodo , convalida che la password contenga uno dei diversi caratteri di simbolo.
  • IL PIN usando il MatchesRegex metodo verifica che la password contenga solo numeri.
  • AllowedAADCharacters usando il MatchesRegex metodo , verifica che sia stato specificato solo il carattere non valido per la password.
  • Non consentitoWhitespace usando il MatchesRegex metodo , verifica che la password non inizi o finisa con un carattere di spazio vuoto.
<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>

Dopo aver definito le convalide di base, è possibile combinarle e creare un set di criteri password che è possibile usare nei criteri:

  • SimplePassword convalida DisallowedWhitespace, AllowedAADCharacters e IsLengthBetween8And64
  • StrongPassword convalida DisallowedWhitespace, AllowedAADCharacters, IsLengthBetween8And64. L'ultimo gruppo CharacterClasses esegue un set aggiuntivo di predicati con MatchAtLeast impostato su 3. La password utente deve avere una lunghezza compresa tra 8 e 16 caratteri e tre dei caratteri seguenti: minuscolo, maiuscolo, numero o simbolo.
  • CustomPassword convalida solo DisallowedWhitespace, AllowedAADCharacters. Pertanto, l'utente può fornire qualsiasi password con qualsiasi lunghezza, purché i caratteri siano validi.
<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>

Nel tipo di attestazione aggiungere l'elemento PredicateValidationReference e specificare l'identificatore come una delle convalide del predicato, ad esempio 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>

Di seguito viene illustrato come sono organizzati gli elementi quando Azure AD B2C visualizza il messaggio di errore:

Diagramma della complessità delle password Predicate e PredicateGroup

Configurare un intervallo di date

Con gli elementi Predicates e PredicateValidations è possibile controllare i valori di data minima e massima di UserInputType usando un oggetto DateTimeDropdown. A tale scopo, creare un predicato con il IsDateRange metodo e specificare i parametri minimo e massimo.

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

Aggiungere un predicatoValidation con un riferimento al DateRange predicato.

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

Nel tipo di attestazione aggiungere l'elemento PredicateValidationReference e specificare l'identificatore come 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>

Passaggi successivi