Predicates en PredicateValidations

Notitie

In Azure Active Directory B2C is een aangepast beleid voornamelijk bedoeld om complexe scenario's aan te pakken. Voor de meeste scenario's raden we u aan de ingebouwde gebruikersstromen te gebruiken. Als u dit nog niet hebt gedaan, vindt u meer informatie over aangepast beleid in het starterspakket in Aan de slag met aangepaste beleidsregels in Active Directory B2C.

Met de elementen Predicates en PredicateValidations kunt u een validatieproces uitvoeren om ervoor te zorgen dat alleen correct gevormde gegevens worden ingevoerd in uw Azure Active Directory B2C-tenant (Azure AD B2C).

Het volgende diagram geeft de relatie tussen deze klassen weer.

Diagram van de relaties tussen Predicaten en Predicaatvalidaties

Predicaten

Het element Predicate definieert een basisvalidatie om de waarde van een claimtype te controleren en retourneert true of false. De validatie wordt uitgevoerd met behulp van een opgegeven elementMethode en een set van Parameter elementen die relevant zijn voor de methode. Een predicaat kan bijvoorbeeld controleren of de lengte van een tekenreeks claimwaarde binnen het bereik van minimum- en maximumparameters valt, maar bijvoorbeeld ook of een tekenreeksclaimwaarde een tekenset bevat. Het element UserHelpText biedt een foutbericht voor gebruikers als de controle mislukt. De waarde van het element UserHelpText kan worden gelokaliseerd met behulp van taalaanpassing.

Het element Predicates moet direct na het element ClaimsSchema worden weergegeven in het element BuildingBlocks.

Het element Predicates bevat het volgende element:

Element Instanties Description
Predicaat 1:n Een lijst met predicaten.

Het element Predicate bevat de volgende kenmerken:

Kenmerk Vereist Beschrijving
Id Yes Een id die wordt gebruikt voor het predicaat. Andere elementen kunnen deze id gebruiken in het beleid.
Methode Yes Het methodetype dat moet worden gebruikt voor de validatie. Mogelijke waarden: IsLengthRange, MatchesRegex, IncludesCharacters of IsDateRange.
HelpText No Een foutbericht voor gebruikers als de controle mislukt. Deze tekenreeks kan worden gelokaliseerd met behulp van de taalaanpassing

Het element Predicate bevat de volgende elementen:

Element Instanties Description
UserHelpText 0:1 (Afgeschaft) Een foutbericht voor gebruikers als de controle mislukt.
Parameters 1:1 De parameters voor het methodetype van de tekenreeksvalidatie.

Het element Parameters bevat de volgende elementen:

Element Instanties Description
Parameter 1:n De parameters voor het methodetype van de tekenreeksvalidatie.

Het element Parameters bevat de volgende kenmerken:

Element Instanties Description
Id 1:1 De id van de parameter.

Predicaatmethoden

IsLengthRange

De IsLengthRange methode controleert of de lengte van een tekenreeksclaimwaarde binnen het bereik valt van de opgegeven minimum- en maximumparameters. Bekijk de Live-demo van deze predicaatmethode. Het predicaatelement ondersteunt de volgende parameters:

Parameter Vereist Beschrijving
Maximum Yes Het maximum aantal tekens dat kan worden ingevoerd.
Minimum Yes Het minimale aantal tekens dat moet worden ingevoerd.

In het volgende voorbeeld ziet u een IsLengthRange-methode met de parameters Minimum en Maximum die het lengtebereik van de tekenreeks opgeven:

<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

De MatchesRegex methode controleert of een tekenreeksclaimwaarde overeenkomt met een reguliere expressie. Bekijk de Live-demo van deze predicaatmethode. Het predicaatelement ondersteunt de volgende parameters:

Parameter Vereist Beschrijving
RegularExpression Yes Het patroon van de reguliere expressie dat moet worden overeengekomen.

In het volgende voorbeeld ziet u een MatchesRegex methode met parameter RegularExpression waarmee een reguliere expressie wordt opgegeven:

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

IncludesCharacters

De IncludesCharacters methode controleert of een tekenreeksclaimwaarde een tekenset bevat. Bekijk de Live-demo van deze predicaatmethode. Het predicaatelement ondersteunt de volgende parameters:

Parameter Vereist Beschrijving
CharacterSet Yes De reeks tekens die kunnen worden ingevoerd. Bijvoorbeeld, kleine letters a-z, hoofdletters A-Z, cijfers 0-9 of een lijst met symbolen, zoals @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

In het volgende voorbeeld ziet u een IncludesCharacters methode met parameter CharacterSet waarmee een reguliere expressie wordt opgegeven:

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

IsDateRange

De IsDateRange methode controleert of een datumclaimwaarde zich tussen een opgegeven bereik van minimum- en maximumparameters bevindt. Bekijk de Live-demo van deze predicaatmethode. Het predicaatelement ondersteunt de volgende parameters:

Parameter Vereist Beschrijving
Maximum Yes De kleinst mogelijke datum die kan worden ingevoerd. De indeling van de datum volgt de yyyy-mm-dd conventie, of Today.
Minimum Yes De kleinst mogelijke datum die kan worden ingevoerd. De indeling van de datum volgt de yyyy-mm-dd conventie, of Today.

In het volgende voorbeeld ziet u een IsDateRange methode met de parameters Minimum en Maximum waarmee het datumbereik wordt opgegeven met een notatie van yyyy-mm-dd en 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

Hoewel de predicaten de validatie definiƫren om te controleren op een claimtype, groeperen de PredicateValidations een set van predicaten voor de validatie van de gebruikersinvoer die kan worden toegepast op een claimtype. Elk PredicateValidation-element bevat een set PredicateGroup-elementen die een set PredicateReference-elementen bevatten die naar een predicaat verwijst. Om de validatie door te geven, moet de waarde van de claim alle tests van een predicaat onder alle PredicateGroup met hun set PredicateReference-elementen doorgeven.

Het element PredicateValidations moet direct na het element Predicaten worden weergegeven in het element BuildingBlocks.

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

Het element PredicateValidations bevat het volgende element:

Element Instanties Description
PredicateValidation 1:n Een lijst met predicaatvalidaties.

Het element PredicateValidation bevat het volgende kenmerk:

Kenmerk Vereist Beschrijving
Id Yes Een id die wordt gebruikt voor de predicaatvalidatie. Het element ClaimType kan deze id gebruiken in het beleid.

Het element PredicateValidation bevat het volgende element:

Element Instanties Description
PredicateGroups 1:n Een lijst met predicaatgroepen.

Het element PredicateGroups bevat het volgende element:

Element Instanties Description
PredicateGroup 1:n Een lijst met predicaten.

Het element PredicateGroup bevat het volgende kenmerk:

Kenmerk Vereist Beschrijving
Id Yes Een id die wordt gebruikt voor de predicaatgroep.

Het element PredicateGroup bevat de volgende elementen:

Element Instanties Description
UserHelpText 0:1 Een beschrijving van het predicaat dat nuttig kan zijn voor gebruikers om te weten welke waarde ze moeten typen.
PredicateReferences 1:n Een lijst met predicaatverwijzingen.

Het element PredicateReferences bevat de volgende kenmerken:

Kenmerk Vereist Beschrijving
MatchAtLeast No Hiermee geeft u op dat de waarde moet overeenkomen met ten minste net zo veel predicaatdefinities opdat de invoer zou worden geaccepteerd. Als deze niet is opgegeven, moet de waarde overeenkomen met alle predicaatdefinities.

Het element PredicateReferences bevat de volgende elementen:

Element Instanties Description
PredicateReference 1:n Een verwijzing naar een predicaat.

Het element PredicateReferences bevat de volgende kenmerken:

Kenmerk Vereist Beschrijving
Id Yes Een id die wordt gebruikt voor de predicaatvalidatie.

Wachtwoordcomplexiteit gebruiken

Met Predicaten en PredicateValidationsInput kunt u de complexiteitsvereisten voor wachtwoorden beheren die worden verleend door een gebruiker bij het maken van een account. Azure AD B2C gebruikt standaard sterke wachtwoorden. Azure AD B2C ondersteunt ook configuratieopties om de complexiteit van wachtwoorden te beheren die klanten kunnen gebruiken. U kunt wachtwoordcomplexiteit definiƫren met behulp van deze predicaatelementen:

  • IsLengthBetween8And64 met behulp van de IsLengthRange methode valideert dat het wachtwoord tussen 8 en 64 tekens moet zijn.
  • Kleine letters met behulp van de IncludesCharacters methode valideert dat het wachtwoord een kleine letter bevat.
  • Hoofdletters met behulp van de IncludesCharacters methode valideert dat het wachtwoord een hoofdletter bevat.
  • Cijfer met behulp van de IncludesCharacters methode, valideert dat het wachtwoord een cijfer bevat.
  • Symbool met behulp van de IncludesCharacters methode, valideert dat het wachtwoord een van meerdere symbooltekens bevat.
  • PIN met behulp van de MatchesRegex methode, valideert dat het wachtwoord alleen cijfers bevat.
  • AllowedAADCharacters met behulp van de MatchesRegex methode valideert dat alleen ongeldige tekens werden opgegeven voor het wachtwoord.
  • DisallowedWhitespace met behulp van de MatchesRegex methode, valideert dat het wachtwoord niet begint of eindigt met een witruimte.
<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>

Nadat u de basisvalidaties hebt gedefinieerd, kunt u deze combineren en een set wachtwoordbeleidsregels maken die u in uw beleid kunt gebruiken:

  • SimplePassword valideert de DisallowedWhitespace, AllowedAADCharacters en IsLengthBetween8And64
  • SimplePassword valideert de DisallowedWhitespace, AllowedAADCharacters en IsLengthBetween8And64. De laatste groep CharacterClasses voert een extra set predicaten uit met MatchAtLeast ingesteld op 3. Het gebruikerswachtwoord moet 8 tot 16 tekens lang zijn en drie van de volgende tekens bevatten: kleine letters, hoofdletters, cijfer of symbool.
  • CustomPassword valideert alleen DisallowedWhitespace, AllowedAADCharacters. De gebruiker kan dus elk wachtwoord opgeven met elke lengte, zolang de tekens geldig zijn.
<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>

Voeg in uw claimtype het element PredicateValidationReference toe en geef de id op als een van de predicaatvalidaties, zoals SimplePassword, StrongPassword of 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>

Hieronder ziet u hoe de elementen zijn geordend wanneer Azure AD B2C het foutbericht weergeeft:

Diagram van de complexiteit van het Predicate en PredicateGroup wachtwoord voorbeeld

Een datumbereik configureren

Met de elementen Predicates en PredicateValidations kunt u de minimum- en maximumdatumwaarden van het UserInputType bepalen met behulp van een DateTimeDropdown. Hiervoor maakt u een Predicate met de IsDateRange methode en geeft u de minimum- en maximumparameters op.

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

Voeg een PredicateValidation toe met een verwijzing naar het DateRange predicaat.

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

Voeg in uw claimtype het element predicateValidationReference toe en geef de id op als 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>

Volgende stappen