Dela via


Predikat och predikatValidationer

Kommentar

I Azure Active Directory B2C är anpassade principer främst utformade för att hantera komplexa scenarier. I de flesta scenarier rekommenderar vi att du använder inbyggda användarflöden. Om du inte har gjort det kan du läsa mer om startpaketet för anpassad princip i Kom igång med anpassade principer i Active Directory B2C.

Med elementen Predicates och PredicateValidations kan du utföra en valideringsprocess för att säkerställa att endast korrekt formade data anges i din Azure Active Directory B2C-klientorganisation (Azure AD B2C).

Följande diagram visar relationen mellan elementen:

Diagram som visar relationen predikat och predikatvalidering

Predikat

Predicate-elementet definierar en grundläggande validering för att kontrollera värdet för en anspråkstyp och returnerar true eller false. Verifieringen görs med hjälp av ett angivet metodelement och en uppsättning parameterelement som är relevanta för metoden. Ett predikat kan till exempel kontrollera om längden på ett stränganspråksvärde ligger inom intervallet för minsta och högsta angivna parametrar, eller om ett stränganspråksvärde innehåller en teckenuppsättning. Elementet UserHelpText innehåller ett felmeddelande för användare om kontrollen misslyckas. Värdet för UserHelpText-elementet kan lokaliseras med hjälp av språkanpassning.

Elementet Predikat måste visas direkt efter elementet ClaimsSchema i elementet BuildingBlocks .

Elementet Predikat innehåller följande element:

Element Händelser beskrivning
Predikat 1:n En lista över predikat.

Predikatelementet innehåller följande attribut:

Attribut Obligatoriskt Beskrivning
Id Ja En identifierare som används för predikatet. Andra element kan använda den här identifieraren i principen.
Metod Ja Den metodtyp som ska användas för validering. Möjliga värden: IsLengthRange, MatchesRegex, IncludesCharacters eller IsDateRange.
HelpText Nej Ett felmeddelande för användare om kontrollen misslyckas. Den här strängen kan lokaliseras med hjälp av språkanpassningen

Predikatelementet innehåller följande element:

Element Händelser beskrivning
UserHelpText 0:1 (Inaktuell) Ett felmeddelande för användare om kontrollen misslyckas.
Parametrar 1:1 Parametrarna för strängverifieringens metodtyp.

Elementet Parameters innehåller följande element:

Element Händelser beskrivning
Parameter 1:n Parametrarna för strängverifieringens metodtyp.

Parameterelementet innehåller följande attribut:

Element Händelser beskrivning
Id 1:1 Parameterns identifierare.

Predikatmetoder

IsLengthRange

Metoden IsLengthRange kontrollerar om längden på ett stränganspråksvärde ligger inom intervallet för minsta och högsta angivna parametrar. Kolla in livedemon för den här predikatmetoden. Predikatelementet stöder följande parametrar:

Parameter Obligatoriskt Beskrivning
Högsta Ja Det maximala antalet tecken som kan anges.
Minimal Ja Det minsta antal tecken som måste anges.

I följande exempel visas en IsLengthRange-metod med parametrarna Minimum och Maximum som anger strängens längdintervall:

<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

Metoden MatchesRegex kontrollerar om ett stränganspråksvärde matchar ett reguljärt uttryck. Kolla in livedemon för den här predikatmetoden. Predikatelementet stöder följande parametrar:

Parameter Obligatoriskt Beskrivning
RegularExpression Ja Det reguljära uttrycksmönster som ska matchas.

I följande exempel visas en MatchesRegex metod med parametern RegularExpression som anger ett reguljärt uttryck:

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

IncludeCharacters

Metoden IncludesCharacters kontrollerar om ett stränganspråksvärde innehåller en teckenuppsättning. Kolla in livedemon för den här predikatmetoden. Predikatelementet stöder följande parametrar:

Parameter Obligatoriskt Beskrivning
Teckenuppsättning Ja Den uppsättning tecken som kan anges. Till exempel gemener a-z, versaler A-Z, siffror 0-9eller en lista med symboler, till @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!exempel .

I följande exempel visas en IncludesCharacters metod med parametern CharacterSet som anger uppsättningen tecken:

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

IsDateRange

Metoden IsDateRange kontrollerar om ett datumanspråksvärde ligger mellan ett intervall med minsta och högsta angivna parametrar. Kolla in livedemon för den här predikatmetoden. Predikatelementet stöder följande parametrar:

Parameter Obligatoriskt Beskrivning
Högsta Ja Det största möjliga datum som kan anges. Formatet för datumet följer yyyy-mm-dd konventionen, eller Today.
Minimal Ja Det minsta möjliga datum som kan anges. Formatet för datumet följer yyyy-mm-dd konventionen, eller Today.

I följande exempel visas en IsDateRange metod med parametrarna Minimum och Maximum som anger datumintervallet med formatet yyyy-mm-dd och 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

Medan predikaten definierar valideringen för att kontrollera mot en anspråkstyp, grupperar PredicateValidations en uppsättning predikat för att bilda en verifiering av användarindata som kan tillämpas på en anspråkstyp. Varje PredicateValidation-element innehåller en uppsättning PredicateGroup-element som innehåller en uppsättning predicateReference-element som pekar på ett predikat. För att klara valideringen bör värdet för anspråket klara alla tester av alla predikat under alla PredicateGroup med deras uppsättning predicateReference-element .

Elementet PredicateValidations måste visas direkt efter elementet Predikat i elementet BuildingBlocks.

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

Elementet PredicateValidations innehåller följande element:

Element Händelser beskrivning
PredicateValidation 1:n En lista över predikatverifiering.

Elementet PredicateValidation innehåller följande attribut:

Attribut Obligatoriskt Beskrivning
Id Ja En identifierare som används för predikatverifieringen. Elementet ClaimType kan använda den här identifieraren i principen.

Elementet PredicateValidation innehåller följande element:

Element Händelser beskrivning
Predikatgrupper 1:n En lista över predikatgrupper.

Elementet PredicateGroups innehåller följande element:

Element Händelser beskrivning
Predikatgrupp 1:n En lista över predikat.

Elementet PredicateGroup innehåller följande attribut:

Attribut Obligatoriskt Beskrivning
Id Ja En identifierare som används för predikatgruppen.

Elementet PredicateGroup innehåller följande element:

Element Händelser beskrivning
UserHelpText 0:1 En beskrivning av predikatet som kan vara till hjälp för användarna att veta vilket värde de ska skriva.
PredicateReferences 1:n En lista över predikatreferenser.

Elementet PredicateReferences innehåller följande attribut:

Attribut Obligatoriskt Beskrivning
MatchAtLeast Nej Anger att värdet måste matcha minst så många predikatdefinitioner för att indata ska accepteras. Om det inte anges måste värdet matcha alla predikatdefinitioner.

Elementet PredicateReferences innehåller följande element:

Element Händelser beskrivning
PredicateReference 1:n En referens till ett predikat.

Elementet PredicateReference innehåller följande attribut:

Attribut Obligatoriskt Beskrivning
Id Ja En identifierare som används för predikatverifieringen.

Konfigurera lösenordskomplexitet

Med Predicates och PredicateValidationsInput kan du styra komplexitetskraven för lösenord som tillhandahålls av en användare när du skapar ett konto. Som standard använder Azure AD B2C starka lösenord. Azure AD B2C har också stöd för konfigurationsalternativ för att kontrollera komplexiteten för lösenord som kunder kan använda. Du kan definiera lösenordskomplexitet med hjälp av dessa predikatelement:

  • IsLengthBetween8And64 med metoden IsLengthRange verifierar att lösenordet måste vara mellan 8 och 64 tecken.
  • GemenerIncludesCharacters med metoden verifierar att lösenordet innehåller en gemen bokstav.
  • Versaler med metoden IncludesCharacters verifierar att lösenordet innehåller en versal bokstav.
  • Tal med hjälp av IncludesCharacters metoden, verifierar att lösenordet innehåller en siffra.
  • SymbolenIncludesCharacters med metoden verifierar att lösenordet innehåller ett av flera symboltecken.
  • PIN-kod med MatchesRegex metoden verifierar att lösenordet endast innehåller siffror.
  • AllowedAADCharacters med metoden MatchesRegex verifierar att lösenordet endast har angetts som ogiltigt tecken.
  • DisallowedWhitespace med metoden MatchesRegex verifierar att lösenordet inte börjar eller slutar med ett blankstegstecken.
<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>

När du har definierat de grundläggande valideringarna kan du kombinera dem och skapa en uppsättning lösenordsprinciper som du kan använda i din princip:

  • SimplePassword validerar DisallowedWhitespace, AllowedAADCharacters och IsLengthBetween8And64
  • StrongPassword validerar DisallowedWhitespace, AllowedAADCharacters, IsLengthBetween8And64. Den sista gruppen CharacterClasses kör ytterligare en uppsättning predikat med MatchAtLeast värdet 3. Användarlösenordet måste vara mellan 8 och 16 tecken och tre av följande tecken: Gemener, Versaler, Tal eller Symbol.
  • CustomPassword validerar endast DisallowedWhitespace, AllowedAADCharacters. Användaren kan därför ange valfritt lösenord med valfri längd, så länge tecknen är giltiga.
<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>

I anspråkstypen lägger du till elementet PredicateValidationReference och anger identifieraren som en av predikatvalideringarna, till exempel SimplePassword, StrongPassword eller 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>

Följande visar hur elementen ordnas när Azure AD B2C visar felmeddelandet:

Diagram över predicate- och predicateGroup-lösenordskomplexitetsexempel

Konfigurera ett datumintervall

Med elementen Predicates och PredicateValidations kan du styra lägsta och högsta datumvärden för UserInputType med hjälp av en DateTimeDropdown. Det gör du genom att skapa ett predikat med IsDateRange metoden och ange de minsta och högsta parametrarna.

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

Lägg till en PredicateValidation med en referens till predikatet DateRange .

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

I anspråkstypen lägger du till elementet PredicateValidationReference och anger identifieraren som 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>

Nästa steg