Predikat dan PredikatValidasi

Catatan

Di Azure Active Directory B2C, kebijakan kustom didesain khusus untuk menangani skenario kompleks. Untuk skenario umum, sebaiknya gunakan alur pengguna bawaan. Jika Anda belum melakukannya, pelajari tentang paket starter kebijakan kustom di Mulai dengan kebijakan kustom di Azure Active Directory B2C.

Elemen Predikat dan PredikatValidasi memungkinkan Anda melakukan proses validasi untuk memastikan bahwa hanya data yang dibentuk dengan benar yang dimasukkan ke penyewa Azure Active Directory B2C (Azure AD B2C).

Diagram berikut menunjukkan hubungan antara elemen:

Diagram menunjukkan hubungan Predikat dan Predikat Validasi

Predikat

Elemen Predikat mendefinisikan validasi dasar untuk memeriksa nilai jenis klaim dan pengembalian true atau false. Validasi dilakukan dengan menggunakan elemen Metode tertentu dan sekumpulan elemen Parameter yang relevan dengan metode. Misalnya, predikat dapat memeriksa apakah panjang nilai klaim untai berada dalam rentang parameter minimum dan maksimum yang ditentukan, atau apakah nilai klaim string berisi tataan karakter. Elemen UserHelpText memberikan pesan kesalahan untuk pengguna jika pemeriksaan gagal. Nilai elemen UserHelpText dapat dilokalkan menggunakan kustomisasi bahasa.

Elemen Predikat harus muncul langsung mengikuti elemen ClaimsSchema dalam elemen BuildingBlocks.

Elemen Predikat berisi elemen berikut ini:

Elemen Kemunculan Deskripsi
Predikat 1:n Daftar predikat.

Elemen Predikat berisi atribut berikut ini:

Atribut Diperlukan Deskripsi
Id Ya Pengidentifikasi yang digunakan untuk predikat. Elemen lain dapat menggunakan pengidentifikasi ini dalam kebijakan.
Metode Ya Jenis metode yang digunakan untuk validasi. Nilai yang mungkin: IsLengthRange, MatchesRegex, IncludesCharacters, atau IsDateRange.
HelpText Tidak Pesan kesalahan untuk pengguna jika pemeriksaan gagal. Untai ini dapat dilokalkan menggunakan kustomisasi bahasa

Elemen Predikat berisi elemen-elemen berikut ini:

Elemen Kemunculan Deskripsi
UserHelpText 0:1 (Tidak digunakan lagi) Pesan kesalahan untuk pengguna jika pemeriksaan gagal.
Parameter 1:1 Parameter untuk jenis metode validasi untai.

Elemen Parameter berisi elemen-elemen berikut ini:

Elemen Kemunculan Deskripsi
Parameter 1:n Parameter untuk jenis metode validasi untai.

Elemen Parameter berisi atribut-atribut berikut ini:

Elemen Kemunculan Deskripsi
Id 1:1 Pengidentifikasi parameter.

Metode predikat

IsLengthRange

Metode IsLengthRange memeriksa apakah panjang nilai klaim untai berada dalam kisaran parameter minimum dan maksimum yang ditentukan. Periksa Demo langsung metode predikat ini. Elemen predikat mendukung parameter berikut ini:

Parameter Diperlukan Deskripsi
Maksimum Ya Jumlah maksimal karakter yang bisa dimasukkan.
Minimum Ya Jumlah minimum karakter yang harus dimasukkan.

Contoh berikut menunjukkan metode IsLengthRange dengan parameter Minimum dan Maximum yang menentukan rentang panjang untai:

<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

Metode MatchesRegex memeriksa apakah nilai klaim untai cocok dengan regex. Periksa Demo langsung metode predikat ini. Elemen predikat mendukung parameter berikut ini:

Parameter Diperlukan Deskripsi
RegularExpression Ya Pola regex yang cocok.

Contoh berikut menunjukkan MatchesRegex metode dengan parameter RegularExpression yang menentukan regex:

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

IncludesCharacters

Metode IncludesCharacters memeriksa apakah nilai klaim untai berisi tataan karakter. Periksa Demo langsung metode predikat ini. Elemen predikat mendukung parameter berikut ini:

Parameter Diperlukan Deskripsi
CharacterSet Ya Kumpulan karakter yang bisa dimasukkan. Misalnya, karakter huruf kecil a-z, karakter huruf besar A-Z, angka 0-9, atau daftar simbol, seperti @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

Contoh berikut menunjukkan IncludesCharacters metode dengan parameter CharacterSet yang menentukan sekumpulan karakter:

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

IsDateRange

Metode IsDateRange memeriksa apakah nilai klaim tanggal berada di antara rentang parameter minimum dan maksimum yang ditentukan. Periksa Demo langsung metode predikat ini. Elemen predikat mendukung parameter berikut ini:

Parameter Diperlukan Deskripsi
Maksimum Ya Tanggal terbesar yang mungkin dapat dimasukkan. Format tanggal mengikuti konvensi yyyy-mm-dd, atau Today.
Minimum Ya Tanggal sekecil mungkin yang dapat dimasukkan. Format tanggal mengikuti konvensi yyyy-mm-dd, atau Today.

Contoh berikut menunjukkan metode IsDateRange dengan parameter Minimum dan Maximum yang menentukan rentang tanggal dengan format yyyy-mm-dd dan 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>

PredikatValidasi

Sementara predikat mendefinisikan validasi untuk memeriksa terhadap jenis klaim, PredikatValidasi mengelompokkan serangkaian predikat untuk membentuk validasi input pengguna yang dapat diterapkan ke jenis klaim. Setiap elemen PredikatValidasi berisi sekumpulan elemen PredicateGroup yang berisi sekumpulan elemen PredicateReference yang menunjuk ke Predikat. Untuk lulus validasi, nilai klaim harus lulus semua tes dari predikat apa pun di bawah semua PredicateGroup dengan serangkaian elemen PredicateReference mereka.

Elemen PredikatValidasi harus muncul secara langsung mengikuti elemen Predikat dalam elemen BuildingBlocks.

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

Elemen PredikatValidasi berisi elemen berikut ini:

Elemen Kemunculan Deskripsi
PredikatValidasi 1:n Daftar validasi predikat.

Elemen PredikatValidasi berisi atribut berikut ini:

Atribut Diperlukan Deskripsi
Id Ya Pengidentifikasi yang digunakan untuk validasi predikat. Elemen ClaimType dapat menggunakan pengidentifikasi ini dalam kebijakan.

Elemen PredikatValidasi berisi elemen berikut ini:

Elemen Kemunculan Deskripsi
PredicateGroups 1:n Daftar grup predikat.

Elemen PredicateGroups berisi elemen berikut ini:

Elemen Kemunculan Deskripsi
PredicateGroup 1:n Daftar predikat.

Elemen PredicateGroup berisi elemen berikut ini:

Atribut Diperlukan Deskripsi
Id Ya Pengidentifikasi yang digunakan untuk grup predikat.

Elemen PredicateGroups berisi elemen berikut ini:

Elemen Kemunculan Deskripsi
UserHelpText 0:1 Deskripsi predikat yang dapat membantu pengguna untuk mengetahui nilai apa yang harus mereka ketik.
PredicateReferences 1:n Daftar referensi predikat.

Elemen PredicateReferences berisi elemen berikut ini:

Atribut Diperlukan Deskripsi
MatchAtLeast Tidak Menentukan bahwa nilai harus cocok setidaknya bahwa banyak definisi predikat untuk input yang akan diterima. Jika tidak ditentukan, nilai harus cocok dengan semua definisi predikat.

Elemen PredicateReferences berisi elemen berikut ini:

Elemen Kemunculan Deskripsi
PredicateReference 1:n Referensi ke predikat.

Elemen PredicateReference berisi elemen berikut ini:

Atribut Diperlukan Deskripsi
Id Ya Pengidentifikasi yang digunakan untuk validasi predikat.

Mengonfigurasi kompleksitas kata sandi

Dengan Predikat dan PredicateValidationsInput Anda dapat mengontrol persyaratan kompleksitas untuk kata sandi yang disediakan oleh pengguna saat membuat akun. Secara default, Azure AD B2C menggunakan kata sandi yang kuat. Azure AD B2C juga mendukung opsi konfigurasi untuk mengontrol kompleksitas kata sandi yang dapat digunakan pelanggan. Anda dapat menentukan kompleksitas kata sandi dengan menggunakan elemen predikat ini:

  • IsLengthBetween8And64 menggunakan metode IsLengthRange, memvalidasi bahwa kata sandi harus terdiri antara 8 dan 64 karakter.
  • Huruf kecil menggunakan metode IncludesCharacters, memvalidasi bahwa sandi berisi huruf kecil.
  • Huruf besar menggunakan metode IncludesCharacters, memvalidasi bahwa sandi berisi huruf besar.
  • Angka menggunakan metode IncludesCharacters, memvalidasi bahwa sandi berisi angka.
  • Simbol menggunakan metode IncludesCharacters, memvalidasi bahwa sandi berisi salah satu dari beberapa karakter simbol.
  • PIN menggunakan metode MatchesRegex, memvalidasi bahwa sandi hanya berisi angka.
  • AllowedAADCharacters menggunakan metode MatchesRegex, memvalidasi bahwa sandi yang diberikan hanya karakter yang tidak valid.
  • DisallowedWhitespace menggunakan metode MatchesRegex, memvalidasi bahwa sandi tidak dimulai atau diakhiri dengan karakter spasi.
<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>

Setelah menentukan validasi dasar, Anda dapat menggabungkannya bersama-sama dan membuat serangkaian kebijakan kata sandi yang dapat digunakan dalam kebijakan Anda:

  • SimplePassword memvalidasi DisallowedWhitespace, AllowedAADCharacters, dan IsLengthBetween8And64
  • StrongPassword memvalidasi DisallowedWhitespace, AllowedAADCharacters, dan IsLengthBetween8And64. Grup terakhir CharacterClasses menjalankan serangkaian predikat tambahan dengan MatchAtLeast set ke 3. Kata sandi pengguna harus antara 8 dan 16 karakter, dan tiga karakter berikut: Huruf kecil, Huruf besar, Angka, atau Simbol.
  • CustomPassword hanya memvalidasi DisallowedWhitespace, AllowedAADCharacters. Jadi, pengguna dapat memberikan kata sandi apa pun dengan panjang berapa pun, selama karakter valid.
<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>

Dalam jenis klaim Anda, tambahkan elemen PredicateValidationReference dan tentukan pengidentifikasi sebagai salah satu validasi predikat, seperti SimplePassword, StrongPassword, atau 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>

Berikut ini memperlihatkan bagaimana elemen diatur saat Azure AD B2C menampilkan pesan kesalahan:

Diagram contoh kompleksitas sandi Predikat dan PredicateGroup

Mengonfigurasi rentang tanggal

Dengan elemen Predikat dan PredikatValidasi, Anda dapat mengontrol nilai tanggal minimum dan maksimum UserInputType dengan menggunakan DateTimeDropdown. Untuk melakukan ini, buat Predikat dengan metode IsDateRange dan berikan parameter minimum dan maksimum.

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

Tambahkan PredikatValidasi dengan referensi ke predikat DateRange.

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

Di jenis klaim Anda, tambahkan elemen PredicateValidationReference dan tentukan pengidentifikasi sebagai 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>

Langkah berikutnya