Predicates وPredicateValidations

إشعار

في Azure Active Directory B2C، تم تصميم النُهج المخصصة بشكل أساسي لمعالجة السيناريوهات المعقدة. بالنسبة إلى معظم السيناريوهات، نوصي باستخدام تدفقات المستخدم المضمنة. إذا لم تقم بذلك، تعرف على حزمة بادئ النهج المخصصة في البدء باستخدام النهج المخصصة في Active Directory B2C.

يُمكّنك العنصران Predicates وPredicateValidations من تنفيذ عملية تحقق من الصحة للتأكد من أن البيانات المكوَّنة بشكل صحيح فقط يتم إدخالها في مستأجر Azure Active Directory B2C (Azure AD B2C) لديك.

يعرض الرسم التخطيطي التالي العلاقة بين العنصرين:

رسم تخطيطي يعرض العلاقة بين التقييمات وعمليات التحقق من صحة التقييمات

تكملات

يعمل العنصر Predicate على تحديد عملية تحقق أساسية من الصحة بهدف فحص قيمة نوع المطالبة ويقدم النتيجة على هيئة true أو false. يتم إجراء عملية التحقق من الصحة باستخدام عنصر محدد للأسلوب ومجموعة عناصر للمعلمات ذات صلة بالأسلوب. على سبيل المثال، يمكن للتقييم فحص ما إذا كان طول قيمة سلسلة المطالبة يقع ضمن نطاق الحد الأدنى والأقصى لعدد المعلمات المحددة، أو ما إذا كانت قيمة سلسلة المطالبة تحتوي على مجموعة أحرف. يوفر العنصر UserHelpText رسالة خطأ للمستخدمين إذا فشل الفحص. يمكن ترجمة قيمة العنصر UserHelpText باستخدام تخصيص اللغة.

يجب أن يظهر العنصر Predicates مباشرة بعد العنصر ClaimsSchema ضمن العنصر BuildingBlocks.

يحتوي العنصر Predicates على العنصر التالي:

العنصر الأحداث ‏‏الوصف
المسند 1:n قائمة بالتقييمات.

يحتوي العنصر Predicate على السمات التالية:

السمة المطلوب ‏‏الوصف
المعرّف ‏‏نعم‬ معرف يُستخدم للتقييم. يمكن للعناصر الأخرى استخدام هذا المعرف في السياسة.
الأسلوب ‏‏نعم‬ نوع الأسلوب المراد استخدامه للتحقق من الصحة. القيم المحتملة: IsLengthRange أو MatchesRegex أو IncludesCharacters أو IsDateRange.
HelpText لا رسالة خطأ تظهر للمستخدمين إذا فشل الفحص. يمكن ترجمة هذه السلسلة باستخدام تخصيص اللغة

يحتوي العنصر Predicate على العناصر التالية:

العنصر الأحداث ‏‏الوصف
UserHelpText 0:1 (مهمَل) رسالة خطأ تظهر للمستخدمين إذا فشل الفحص.
المعلمات 1:1 معلمات نوع الأسلوب المستخدم في التحقق من صحة السلسلة.

يحتوي العنصر Parameters على العناصر التالية:

العنصر الأحداث ‏‏الوصف
المعلمة‬ 1:n معلمات نوع الأسلوب المستخدم في التحقق من صحة السلسلة.

يحتوي العنصر Parameter على السمات التالية:

العنصر الأحداث ‏‏الوصف
المعرّف 1:1 معرف المعلمة.

أساليب التقييم

IsLengthRange

يفحص الأسلوب IsLengthRange ما إذا كان طول قيمة سلسلة المطالبة يقع ضمن نطاق الحد الأدنى والأقصى لعدد المعلمات المحددة. تحقق من العرض التوضيحي المباشر للأسلوب الأصلي هذا. يدعم عنصر التقييم المعلمات التالية:

المعلمة‬ المطلوب ‏‏الوصف
الحد الأقصى ‏‏نعم‬ الحد الأقصى لعدد الأحرف التي يمكن إدخالها.
الحد الأدنى ‏‏نعم‬ الحد الأدنى لعدد الأحرف التي يجب إدخالها.

يوضح المثال التالي أسلوب IsLengthRange مع المعلمات Minimum والتي Maximum تحدد نطاق طول السلسلة:

<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

يفحص الأسلوب MatchsRegex ما إذا كانت قيمة سلسلة المطالبة تتطابق مع أي تعبير عادي. تحقق من العرض التوضيحي المباشر للأسلوب الأصلي هذا. يدعم عنصر التقييم المعلمات التالية:

المعلمة‬ المطلوب ‏‏الوصف
RegularExpression ‏‏نعم‬ نمط التعبير العادي المطلوب مطابقته.

يعرض المثال التالي MatchesRegex أسلوباً مزوداً بالمعلمة RegularExpression التي تحدد تعبيراً عادياً:

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

IncludesCharacters

يفحص الأسلوب IncludesCharacters ما إذا كانت قيمة سلسلة المطالبة تحتوي على مجموعة أحرف. تحقق من العرض التوضيحي المباشر للأسلوب الأصلي هذا. يدعم عنصر التقييم المعلمات التالية:

المعلمة‬ المطلوب ‏‏الوصف
مجموعة الأحرف ‏‏نعم‬ مجموعة الأحرف التي يمكن إدخالها. على سبيل المثال، الأحرف الصغيرة a-z، أو الأحرف الكبيرة A-Z، أو الأرقام 0-9، أو قائمة الرموز، مثل @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!.

يعرض المثال التالي IncludesCharacters أسلوباً مزوداً بالمعلمة CharacterSet التي تحدد مجموعة الأحرف:

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

IsDateRange

يفحص الأسلوب IsDateRange ما إذا كانت قيمة سلسلة المطالبة التاريخ تقع بين نطاق الحد الأدنى والأقصى لعدد المعلمات المحددة. تحقق من العرض التوضيحي المباشر للأسلوب الأصلي هذا. يدعم عنصر التقييم المعلمات التالية:

المعلمة‬ المطلوب ‏‏الوصف
الحد الأقصى ‏‏نعم‬ أبعد تاريخ محتمل يمكن إدخاله. يتبع تنسيق التاريخ الشكل التقليدي yyyy-mm-dd، أو Today.
الحد الأدنى ‏‏نعم‬ أقرب تاريخ محتمل يمكن إدخاله. يتبع تنسيق التاريخ الشكل التقليدي yyyy-mm-dd، أو Today.

يعرض المثال التالي أسلوب IsDateRange المزود بالمعلمتين Minimum وMaximum اللتين تحددان نطاق التاريخ بتنسيق yyyy-mm-dd و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

تعمل PredicateValidations على تجميع مجموعة من التقييمات لتشكيل عملية التحقق من صحة إدخال المستخدم التي يمكن تطبيقها على نوع المطالبة، بينما تحدد التقييمات عملية التحقق من الصحة اللازمة لفحص نوع المطالبة. يحتوي كل عنصر من عناصر PredicateValidation على مجموعة من عناصر PredicateGroup التي تحتوي على مجموعة من عناصر PredicateReference التي تشير إلى Predicate. لاجتياز عملية التحقق من الصحة، يجب أن تجتاز قيمة المطالبة جميع الاختبارات التي يجريها أي تقييم موجود ضمن مجموعة PredicateGroup كلها المزودة بمجموعة العناصر PredicateReference التابعة لها.

يجب أن يظهر العنصر PredicateValidations مباشرة بعد العنصر Predicates ضمن العنصر BuildingBlocks.

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

يحتوي العنصر PredicateValidations على العنصر التالي:

العنصر الأحداث ‏‏الوصف
PredicateValidation 1:n قائمة بعمليات التحقق من صحة التقييم.

يحتوي العنصرPredicateValidation على السمة التالية:

السمة المطلوب ‏‏الوصف
المعرّف ‏‏نعم‬ معرف يُستخدم لعملية التحقق من صحة التقييم. يمكن للعنصر ClaimType استخدام هذا المعرف في النهج.

يحتوي العنصر PredicateValidation على العنصر التالي:

العنصر الأحداث ‏‏الوصف
PredicateGroups 1:n قائمة بمجموعات التقييمات.

يحتوي العنصر PredicateGroups على العنصر التالي:

العنصر الأحداث ‏‏الوصف
PredicateGroup 1:n قائمة بالتقييمات.

يحتوي العنصر PredicateGroup على السمة التالية:

السمة المطلوب ‏‏الوصف
المعرّف ‏‏نعم‬ معرف يُستخدم لمجموعة التقييمات.

يحتوي العنصر PredicateGroup على العناصر التالية:

العنصر الأحداث ‏‏الوصف
UserHelpText 0:1 وصف للتقييم الذي يمكن أن يكون مفيداً للمستخدمين من أجل معرفة نوع القيمة التي يجب أن يكتبوها.
PredicateReferences 1:n قائمة المراجع الأصلية.

يحتوي العنصر PredicateReferences على السمات التالية:

السمة المطلوب ‏‏الوصف
MatchAtLeast لا تحدد ضرورة تطابق القيمة مع تحديدات التقييم العديدة على الأقل للإدخال الذي سيتم قبوله. إذا لم يتم تحديد ذلك، يجب أن تتطابق القيمة مع جميع تحديدات التقييم.

يحتوي العنصر PredicateReferences على العناصر التالية:

العنصر الأحداث ‏‏الوصف
PredicateReference 1:n مرجع إلى التقييم.

يحتوي العنصر PredicateReference على السمات التالية:

السمة المطلوب ‏‏الوصف
المعرّف ‏‏نعم‬ معرف يُستخدم لعملية التحقق من صحة التقييم.

تكوين تعقيد كلمة المرور

يمكنك التحكم في متطلبات تعقيد كلمات المرور التي يوفرها أي مستخدم عند إنشاء حساب باستخدام Predicates وPredicateValidationsInput. وبشكل افتراضي، يستخدم Azure AD B2C كلمات مرور قوية. يدعم Microsoft Azure Active Directory B2C أيضًا خيارات التكوين للتحكم في تعقيد كلمات المرور التي يمكن للعملاء استخدامها. يمكنك تحديد مدى تعقيد كلمة المرور باستخدام عناصر التقييم هذه:

  • يعمل IsLengthBetween8And64 باستخدام الأسلوب IsLengthRange على التحقق من صحة عدد أحرف كلمة المرور التي يجب أن تتراوح بين 8 و64 حرفاً.
  • يعمل Lowercase باستخدام الأسلوب IncludesCharacters على التحقق من صحة احتواء كلمة المرور على حرف صغير.
  • يعمل Uppercase باستخدام الأسلوب IncludesCharacters على التحقق من صحة احتواء كلمة المرور على حرف كبير.
  • يعمل Number باستخدام الأسلوب IncludesCharacters على التحقق من صحة احتواء كلمة المرور على رقم.
  • يعمل Symbol باستخدام الأسلوب IncludesCharacters على التحقق من صحة احتواء كلمة المرور على حرف واحد من أحرف الرموز المتعددة.
  • يعمل PIN باستخدام الأسلوب MatchesRegex على التحقق من صحة احتواء كلمة المرور على أرقام فقط.
  • يعمل AllowedAADCharacters باستخدام الأسلوب MatchesRegex على التحقق من صحة توفير الحرف الوحيد غير الصالح في كلمة المرور.
  • يعمل DisallowedWhitespace باستخدام الأسلوب MatchesRegex على التحقق من عدم بدء كلمة المرور أو انتهائها بمسافة تحل محل حرف.
<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>

بعد تحديد عمليات التحقق الأساسية من الصحة، يمكنك دمجها معاً وإنشاء مجموعة من نُهج كلمات المرور التي يمكنك استخدامها في النهج الذي تعتمده:

  • يعمل SimplePassword على التحقق من صحة DisallowedWhitespace، وAllowedAADCharacters، وIsLengthBetween8And64
  • يعمل StrongPassword على التحقق من صحة DisallowedWhitespace، وAllowedAADCharacters، وIsLengthBetween8And64. وتتولى المجموعة الأخيرة CharacterClasses تشغيل مجموعة إضافية من التقييمات مع تعيين MatchAtLeast على 3. يجب أن يتراوح عدد أحرف كلمة مرور المستخدم بين 8 و16 حرفاً، وأن تحتوي الكلمة على ثلاثة أحرف من الأحرف التالية: أحرف صغيرة أو أحرف كبيرة أو رقم أو رمز.
  • يعمل CustomPassword على التحقق من صحة DisallowedWhitespace وAllowedAADCharacters فقط. لذا، يمكن للمستخدم توفير أي كلمة مرور بأي طول، طالما أن الأحرف صالحة.
<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>

في نوع المطالبة لديك، أضِف العنصر PredicateValidationReference وحدد المعرف على أنه عملية واحدة من عمليات التحقق من صحة التقييم، مثل SimplePassword أو StrongPassword أو 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>

قيما يلي عرض للطريقة التي يتم من خلالها تنظيم العناصر عندما يعرض Azure AD B2C رسالة الخطأ:

رسم تخطيطي يوضح مثالاً لتعقيد كلمة مرور باستخدام العنصرين Predicate وPredicateGroup

تكوين نطاق تاريخ

يمكنك استخدام العنصرين Predicates وPredicateValidations للتحكم في الحد الأدنى والأقصى لقيم التاريخ في UserInputType باستخدام DateTimeDropdown. للقيام بذلك، عليك إنشاء Predicate باستخدام الأسلوب IsDateRange وتوفير الحد الأدنى والحد الأقصى لعدد المعلمات.

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

أضِف PredicateValidation مع مرجع إلى التقييم DateRange.

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

في نوع المطالبة لديك، أضِف العنصر PredicateValidationReference وحدد المعرف على أنه 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>

الخطوات التالية