Predikat och predikatValidationer

Anteckning

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

Elementet Predikat 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. Till exempel kan ett predikat 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 Description
Predikat 1:n En lista över predikat.

Elementet Predikat innehåller följande attribut:

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

Predicate-elementet innehåller följande element:

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

Elementet Parameters innehåller följande element:

Element Händelser Description
Parameter 1:n Parametrarna för strängvalideringens metodtyp.

Parameterelementet innehåller följande attribut:

Element Händelser Description
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. Ta en titt på livedemon för den här predikatmetoden. Predikatelementet stöder följande parametrar:

Parameter Krävs Beskrivning
Maximal Yes Det maximala antalet tecken som kan anges.
Minimum Yes Det minsta antalet 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. Ta en titt på livedemon för den här predikatmetoden. Predikatelementet stöder följande parametrar:

Parameter Krävs Beskrivning
RegularExpression Yes Det reguljära uttrycksmönstret 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>

Inkluderarcharacters

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

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

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

<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 är mellan ett intervall med minsta och högsta angivna parametrar. Ta en titt på livedemon för den här predikatmetoden. Predikatelementet stöder följande parametrar:

Parameter Krävs Beskrivning
Maximal Yes Det största möjliga datumet som kan anges. Formatet för datumet följer yyyy-mm-dd konventionen, eller Today.
Minimum Yes 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 ett 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 Description
PredicateValidation 1:n En lista över predikatvalidering.

Elementet PredicateValidation innehåller följande attribut:

Attribut Krävs Beskrivning
Id Yes En identifierare som används för predikatvalidering. Elementet ClaimType kan använda den här identifieraren i principen.

Elementet PredicateValidation innehåller följande element:

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

Elementet PredicateGroups innehåller följande element:

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

Elementet PredicateGroup innehåller följande attribut:

Attribut Krävs Beskrivning
Id Yes En identifierare som används för predikatgruppen.

Elementet PredicateGroup innehåller följande element:

Element Händelser Description
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 Krävs Beskrivning
MatchAtLeast No 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 Description
PredicateReference 1:n En referens till ett predikat.

PredicateReference-elementet innehåller följande attribut:

Attribut Krävs Beskrivning
Id Yes En identifierare som används för predikatvalidering.

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 stöder också konfigurationsalternativ för att kontrollera komplexiteten hos lösenord som kunder kan använda. Du kan definiera lösenordskomplexitet med hjälp av följande 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 metoden IncludesCharacters 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.
  • OtillåtetWhitespace 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 principen:

  • 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 OtillåtetWhitespace, 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>

Lägg till elementet PredicateValidationReference i anspråkstypen och ange 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 predikat- 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 parametrarna minimum och maximum.

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

Lägg till elementet PredicateValidationReference i anspråkstypen och ange 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