Predikat dan PredikatValidasi

Penting

Berlaku mulai 1 Mei 2025, Azure AD B2C tidak akan lagi tersedia untuk dibeli untuk pelanggan baru. Pelajari lebih lanjut di FAQ kami.

Nota

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 Predicates dan PredicateValidations memungkinkan Anda melakukan proses validasi untuk memastikan bahwa hanya data yang dibentuk dengan benar yang dimasukkan ke dalam penyewa Azure Active Directory B2C (Azure AD B2C) Anda.

Diagram berikut menunjukkan hubungan antara elemen:

Diagram yang menunjukkan hubungan Predikat dan Validasi Predikat

Predikat

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

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

Elemen Predikat berisi elemen berikut:

Elemen Kemunculan Deskripsi
Predikat 1:n Daftar predikat.

Elemen Predikat berisi atribut berikut:

Karakteristik Diperlukan Deskripsi
Nomor Identitas Ya Pengidentifikasi yang digunakan untuk predikat. Elemen lain dapat menggunakan pengidentifikasi ini dalam kebijakan.
Metode Ya Jenis metode yang akan digunakan untuk validasi. Nilai yang memungkinkan: IsLengthRange, MatchesRegex, IncludesCharacters, atau IsDateRange.
Teks Bantuan Tidak. Pesan kesalahan untuk pengguna jika pemeriksaan gagal. String ini dapat dilokalkan menggunakan penyesuaian bahasa

Elemen Predikat berisi elemen-elemen berikut:

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

Elemen Parameter berisi elemen berikut:

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

Elemen Parameter berisi atribut berikut:

Elemen Kemunculan Deskripsi
Nomor Identitas 1:1 Pengidentifikasi parameter.

Metode predikat

Rentang Panjang

Metode IsLengthRange memeriksa apakah panjang nilai klaim string berada dalam rentang parameter minimum dan maksimum yang ditentukan. Lihat demo langsung dari metode predikat ini. Elemen predikat mendukung parameter berikut:

Pengaturan Diperlukan Deskripsi
Maksimum Ya Jumlah maksimum karakter yang dapat dimasukkan.
Sekurang-kurangnya Ya Jumlah minimum karakter yang harus dimasukkan.

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

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

PertandinganRegex

Metode MatchesRegex memeriksa apakah nilai klaim string cocok dengan ekspresi reguler. Lihat demo langsung dari metode predikat ini. Elemen predikat mendukung parameter berikut:

Pengaturan Diperlukan Deskripsi
Ekspresi Reguler Ya Pola ekspresi reguler yang cocok.

Contoh berikut menunjukkan MatchesRegex metode dengan parameter RegularExpression yang menentukan ekspresi reguler:

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

TermasukKarakter

Metode IncludesCharacters memeriksa apakah nilai klaim string berisi kumpulan karakter. Lihat demo langsung dari metode predikat ini. Elemen predikat mendukung parameter berikut:

Pengaturan Diperlukan Deskripsi
Set Karakter Ya Himpunan karakter yang dapat dimasukkan. Misalnya, karakter a-zhuruf kecil , karakter A-Zhuruf besar , digit 0-9, atau daftar simbol, seperti @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

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

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

Rentang TanggalIsIsDateRange

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

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

Contoh berikut menunjukkan IsDateRange metode 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 menentukan validasi untuk memeriksa jenis klaim, PredicateValidations mengelompokkan sekumpulan predikat untuk membentuk validasi input pengguna yang dapat diterapkan ke jenis klaim. Setiap elemen PredicateValidation berisi sekumpulan elemen PredicateGroup yang berisi sekumpulan elemen PredicateReference yang menunjuk ke Predicate. Untuk lulus validasi, nilai klaim harus lulus semua pengujian predikat apa pun di bawah semua PredicateGroup dengan kumpulan elemen PredicateReference-nya .

Elemen PredicateValidations harus muncul langsung setelah elemen Predicates dalam elemen BuildingBlocks .

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

Elemen PredicateValidations berisi elemen berikut:

Elemen Kemunculan Deskripsi
PredikatValidasi 1:n Daftar validasi predikat.

Elemen PredicateValidation berisi atribut berikut:

Karakteristik Diperlukan Deskripsi
Nomor Identitas Ya Pengidentifikasi yang digunakan untuk validasi predikat. Elemen ClaimType dapat menggunakan ID ini dalam kebijakan.

Elemen PredicateValidation berisi elemen berikut:

Elemen Kemunculan Deskripsi
Grup Predikat 1:n Daftar kelompok predikat.

Elemen PredicateGroups berisi elemen berikut:

Elemen Kemunculan Deskripsi
PredikatGrup 1:n Daftar predikat.

Elemen PredicateGroup berisi atribut berikut:

Karakteristik Diperlukan Deskripsi
Nomor Identitas Ya Pengidentifikasi yang digunakan untuk grup predikat.

Elemen PredicateGroup berisi elemen berikut:

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

Elemen PredicateReferences berisi atribut berikut:

Karakteristik Diperlukan Deskripsi
CocokSetidaknya Tidak. Menentukan bahwa nilai harus cocok dengan setidaknya sebanyak definisi predikat agar input diterima. Jika tidak ditentukan, nilai harus cocok dengan semua definisi predikat.

Elemen PredicateReferences berisi elemen berikut:

Elemen Kemunculan Deskripsi
PredikatReferensi 1:n Referensi ke predikat.

Elemen PredicateReference berisi atribut berikut:

Karakteristik Diperlukan Deskripsi
Nomor Identitas 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 ini IsLengthRange , memvalidasi bahwa kata sandi harus antara 8 dan 64 karakter.
  • Huruf kecil menggunakan metode ini IncludesCharacters , memvalidasi bahwa kata sandi berisi huruf kecil.
  • Huruf besar menggunakan metode ini IncludesCharacters , memvalidasi bahwa kata sandi berisi huruf besar.
  • Nomor menggunakan IncludesCharacters metode, memvalidasi bahwa kata sandi berisi digit.
  • Simbol menggunakan metode ini IncludesCharacters , memvalidasi bahwa kata sandi berisi salah satu dari beberapa karakter simbol.
  • PIN menggunakan metode ini MatchesRegex , memvalidasi bahwa kata sandi hanya berisi angka.
  • AllowedAADCharacters menggunakan metode ini MatchesRegex , memvalidasi bahwa kata sandi hanya karakter yang tidak valid yang disediakan.
  • DisallowedWhitespace menggunakan metode ini MatchesRegex , memvalidasi bahwa kata sandi tidak dimulai atau diakhiri dengan karakter spasi kosong.
<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 dan membuat serangkaian kebijakan sandi yang dapat Anda gunakan dalam kebijakan:

  • SimplePassword memvalidasi DisallowedWhitespace, AllowedAADCharacters, dan IsLengthBetween8And64
  • StrongPassword memvalidasi DisallowedWhitespace, AllowedAADCharacters, IsLengthBetween8And64. Grup CharacterClasses terakhir 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 karakternya 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 menunjukkan bagaimana elemen diatur saat Azure AD B2C menampilkan pesan kesalahan:

Diagram Contoh kompleksitas kata sandi Predikat dan PredikatGroup

Mengonfigurasi rentang tanggal

Dengan elemen Predicates dan PredicateValidations, Anda dapat mengontrol nilai tanggal minimum dan maksimum UserInputType dengan menggunakan .DateTimeDropdown Untuk melakukan ini, buat Predikat dengan metode dan IsDateRange 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 PredicateValidation dengan referensi ke DateRange predikat.

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

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