التحقق من صحة مدخلات المستخدم باستخدام نهج Azure Active Directory B2C المخصص

لا يسمح لك النهج المخصص ل Azure Active Directory B2C (Azure AD B2C) بجعل مدخلات المستخدم إلزامية فحسب، بل أيضا التحقق من صحتها. يمكنك وضع علامة على مدخلات المستخدم على أنها مطلوبة، مثل <DisplayClaim ClaimTypeReferenceId="givenName" Required="true"/>، ولكن هذا لا يعني أن المستخدمين سيدخلون بيانات صالحة. يوفر Azure AD B2C طرقا مختلفة للتحقق من صحة إدخال المستخدم. في هذه المقالة، ستتعلم كيفية كتابة نهج مخصص يجمع مدخلات المستخدم ويتحقق من صحتها باستخدام الأساليب التالية:

  • تقييد البيانات التي يدخلها المستخدم من خلال توفير قائمة بالخيارات للاختيار منها. يستخدم هذا الأسلوب القيم التعدادية، والتي تضيفها عند الإعلان عن مطالبة.

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

  • حدد مجموعة من القواعد واطلب من إدخال المستخدم طاعة واحدة أو أكثر من القواعد. يستخدم هذا الأسلوب دالات التقييم التي تضيفها عند الإعلان عن مطالبة.

  • استخدم نوع المطالبة الخاصة reenterPassword للتحقق من أن المستخدم أعاد إدخال كلمة المرور الخاصة به بشكل صحيح أثناء مجموعة إدخال المستخدم.

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

المتطلبات الأساسية

إشعار

هذه المقالة هي جزء من سلسلة دليل كيفية إنشاء وتشغيل النهج المخصصة الخاصة بك في Azure Active Directory B2C. نوصي ببدء تشغيل هذه السلسلة من المقالة الأولى.

الخطوة 1 - التحقق من صحة إدخال المستخدم عن طريق الحد من خيارات إدخال المستخدم

إذا كنت تعرف جميع القيم المحتملة التي يمكن للمستخدم إدخالها لإدخال معين، يمكنك توفير مجموعة محدودة من القيم التي يجب على المستخدم التحديد منها. يمكنك استخدام DropdownSinglSelect و CheckboxMultiSelect و RadioSingleSelectUserInputType لهذا الغرض. في هذه المقالة، ستستخدم نوع إدخال RadioSingleSelect :

  1. في VS Code، افتح الملف ContosoCustomPolicy.XML.

  2. في ClaimsSchema عنصر ContosoCustomPolicy.XML الملف، قم بتعريف نوع المطالبة التالي:

        <ClaimType Id="accountType">
            <DisplayName>Account Type</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>The type of account used by the user</UserHelpText>
            <UserInputType>RadioSingleSelect</UserInputType>
            <Restriction>
                <Enumeration Text="Contoso Employee Account" Value="work" SelectByDefault="true"/>
                <Enumeration Text="Personal Account" Value="personal" SelectByDefault="false"/>
            </Restriction>
        </ClaimType>
    

    لقد أعلنا عن مطالبة accountType . عند جمع قيمة المطالبة من المستخدم، يجب على المستخدم تحديد حساب موظف Contoso لعمل قيمة أو حساب شخصي لقيمة شخصية.

    يسمح لك Azure AD B2C أيضا باحتواء نهجك بلغات مختلفة ويوفر قيود نوع الحساب للغات متعددة. لمزيد من المعلومات، راجع مقالة ترجمة واجهة المستخدملإضافة سمات المستخدم.

  3. حدد موقع ملف التعريف الفني مع Id="UserInformationCollector"، وأضف مطالبة accountType كمطالبة عرض باستخدام التعليمات البرمجية التالية:

        <DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/>
    
  4. في ملف التعريف التقني مع Id="UserInformationCollector"، أضف مطالبة accountType كمطالبة إخراج باستخدام التعليمات البرمجية التالية:

        <OutputClaim ClaimTypeReferenceId="accountType"/>
    
  5. لتضمين مطالبة نوع الحساب في الرمز المميز للوصول، حدد موقع RelyingParty العنصر، وأضف مطالبة accountType كمطالبة رمز مميز باستخدام التعليمات البرمجية التالية:

        <OutputClaim ClaimTypeReferenceId="accountType" />
    

الخطوة 2 - التحقق من صحة إدخال المستخدم باستخدام التعبيرات العادية

عندما لا يكون من الممكن معرفة جميع قيم إدخال المستخدم المحتملة مسبقا، فإنك تسمح للمستخدم بإدخال البيانات بنفسه. في هذه الحالة، يمكنك استخدام التعبيرات العادية (regex) أو النمط لإملاء كيفية تنسيق إدخال المستخدم. على سبيل المثال، يجب أن يحتوي البريد الإلكتروني على الرمز في (@) ونقطة (.) في مكان ما في نصه.

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

  1. ClaimsSchema حدد موقع العنصر، وقم بتعريف مطالبة البريد الإلكتروني باستخدام التعليمات البرمجية التالية:

        <ClaimType Id="email">
            <DisplayName>Email Address</DisplayName>
            <DataType>string</DataType>
            <DefaultPartnerClaimTypes>
                <Protocol Name="OpenIdConnect" PartnerClaimType="email"/>
            </DefaultPartnerClaimTypes>
            <UserHelpText>Your email address. </UserHelpText>
            <UserInputType>TextBox</UserInputType>
            <Restriction>
                <Pattern RegularExpression="^[a-zA-Z0-9.!#$%&amp;&apos;^_`{}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" HelpText="Please enter a valid email address something like maurice@contoso.com"/>
            </Restriction>
        </ClaimType>
    
  2. حدد موقع ملف التعريف الفني باستخدام Id="UserInformationCollector"، وأضف مطالبة البريد الإلكتروني كمطالبة عرض باستخدام التعليمات البرمجية التالية:

        <DisplayClaim ClaimTypeReferenceId="email" Required="true"/>
    
  3. في ملف التعريف الفني مع Id="UserInformationCollector"، أضف مطالبة البريد الإلكتروني كمطالبة إخراج باستخدام التعليمات البرمجية التالية:

        <OutputClaim ClaimTypeReferenceId="email"/>
    
  4. RelyingParty حدد موقع العنصر، وأضف البريد الإلكتروني كمطالبة رمز مميز باستخدام التعليمات البرمجية التالية:

        <OutputClaim ClaimTypeReferenceId="email" />
    

الخطوة 3 - التحقق من صحة إدخال المستخدم باستخدام دالات التقييم

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

تسمح لك عمليات التحقق من صحة التقييم بمعالجة هذه المشكلة من خلال السماح لك بتعريف مجموعة من القواعد (التقييمات) ورسالة خطأ مستقلة لكل قاعدة. في النهج المخصصة، تحتوي دالة التقييم على أسلوب منشأ، والذي يحدد عمليات التحقق التي تريد إجراؤها. على سبيل المثال، يمكنك استخدام أسلوب دالة التقييم IsLengthRange للتحقق مما إذا كانت كلمة مرور المستخدم ضمن نطاق المعلمات (القيم) الدنيا والقصيدة المحددة.

بينما تحدد دالات التقييم التحقق من الصحة للتحقق من نوع المطالبة، تجمع PredicateValidations مجموعة من التقييمات لتشكيل التحقق من صحة إدخال المستخدم الذي يمكن تطبيقه على نوع المطالبة. على سبيل المثال، يمكنك إنشاء مجموعة دالات تقييم للتحقق من صحة أنواع مختلفة من الأحرف المسموح بها لكلمة مرور. كل من عناصر Predicates وPredicateValidationsهي عناصر تابعة لقسم BuildingBlocks من ملف النهج الخاص بك.

  1. ClaimsSchema حدد موقع العنصر، وقم بتعريف مطالبة كلمة المرور باستخدام التعليمات البرمجية التالية:

        <ClaimType Id="password">
          <DisplayName>Password</DisplayName>
          <DataType>string</DataType>
          <AdminHelpText>Enter password</AdminHelpText>
          <UserHelpText>Enter password</UserHelpText>
          <UserInputType>Password</UserInputType>
        </ClaimType>
    
  2. إضافة عنصر Predicates كعنصر تابع للمقطع BuildingBlocks باستخدام التعليمات البرمجية التالية. يمكنك إضافة العنصر أسفل PredicatesClaimsSchema العنصر:

        <Predicates>
    
        </Predicates>
    
  3. 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="AllowedCharacters" 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>
    

    لقد حددنا العديد من القواعد، والتي عند وضعها معا وصفت كلمة مرور مقبولة. بعد ذلك، يمكنك تجميع دالات التقييم، لتشكيل مجموعة من نهج كلمات المرور التي يمكنك استخدامها في النهج الخاص بك.

  4. إضافة عنصر PredicateValidations كعنصر تابع للمقطع BuildingBlocks باستخدام التعليمات البرمجية التالية. يمكنك إضافة PredicateValidations العنصر كعنصر تابع للمقطع BuildingBlocks ، ولكن أسفل Predicates العنصر:

        <PredicateValidations>
    
        </PredicateValidations>
    
  5. PredicateValidations داخل العنصر، حدد PredicateValidations باستخدام التعليمات البرمجية التالية:

        <PredicateValidation Id="SimplePassword">
            <PredicateGroups>
                <PredicateGroup Id="DisallowedWhitespaceGroup">
                    <PredicateReferences>
                        <PredicateReference Id="DisallowedWhitespace"/>
                    </PredicateReferences>
                </PredicateGroup>
                <PredicateGroup Id="AllowedCharactersGroup">
                    <PredicateReferences>
                        <PredicateReference Id="AllowedCharacters"/>
                    </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="AllowedCharactersGroup">
                    <PredicateReferences>
                        <PredicateReference Id="AllowedCharacters"/>
                    </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="AllowedCharactersGroup">
                    <PredicateReferences>
                        <PredicateReference Id="AllowedCharacters"/>
                    </PredicateReferences>
                </PredicateGroup>
            </PredicateGroups>
        </PredicateValidation>
    

    لقد حددنا ثلاثة التحقق من صحة التقييم، StrongPassword، CustomPassword وSysyPassword. اعتمادا على خصائص كلمة المرور التي تريد أن يقوم المستخدمون بإدخالها، يمكنك استخدام أي منها في عمليات التحقق من صحة التقييم. في هذه المقالة، سنستخدم كلمة مرور قوية.

  6. حدد موقع تعريف نوع المطالبة بكلمة المرور وأضف التحقق من صحة دالة التقييم StrongPassword بعد إعلان عنصر UserInputType الذي يحتوي عليه باستخدام التعليمات البرمجية التالية:

        <PredicateValidationReference Id="StrongPassword" />
    
  7. حدد موقع ملف التعريف الفني باستخدام Id="UserInformationCollector"، وأضف مطالبة كلمة المرور كمطالبة عرض باستخدام التعليمات البرمجية التالية:

        <DisplayClaim ClaimTypeReferenceId="password" Required="true"/>
    
  8. في ملف التعريف الفني مع Id="UserInformationCollector"، أضف مطالبة كلمة المرور كمطالبة إخراج باستخدام التعليمات البرمجية التالية:

        <OutputClaim ClaimTypeReferenceId="password"/>
    

إشعار

لأسباب أمنية، لن نضيف كلمة مرور المستخدمين كمطالبة في الرمز المميز الذي تم إنشاؤه بواسطة النهج الخاص بك. لذلك، لا نضيف مطالبة كلمة المرور إلى عنصر جهة الاعتماد.

الخطوة 4 - التحقق من صحة كلمة المرور وتأكيد كلمة المرور

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

استخدم الخطوات التالية للتحقق من صحة إعادة إدخال كلمة المرور في النهج المخصص:

  1. في القسم الخاص بك ClaimsSchema من الملف، ContosoCustomPolicy.XML أعلن عن مطالبة reenterPassword بعد مطالبة كلمة المرور باستخدام التعليمات البرمجية التالية:

        <ClaimType Id="reenterPassword">
            <DisplayName>Confirm new password</DisplayName>
            <DataType>string</DataType>
            <AdminHelpText>Confirm new password</AdminHelpText>
            <UserHelpText>Reenter password</UserHelpText>
            <UserInputType>Password</UserInputType>
        </ClaimType>    
    
  2. لتجميع إدخال تأكيد كلمة المرور من المستخدم، حدد موقع UserInformationCollector ملف التعريف الفني المؤكد ذاتيا، وأضف مطالبة reenterPassword كمطالبة عرض باستخدام التعليمات البرمجية التالية:

        <DisplayClaim ClaimTypeReferenceId="reenterPassword" Required="true"/>
    
  3. في ملفك ContosoCustomPolicy.XML ، حدد موقع UserInformationCollector ملف التعريف الفني المؤكد ذاتيا، وأضف مطالبة reenterPassword كمطالبة إخراج باستخدام التعليمات البرمجية التالية:

        <OutputClaim ClaimTypeReferenceId="reenterPassword"/>
    

الخطوة 5 - تحميل ملف نهج مخصص

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

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

الخطوة 6 - اختبار النهج المخصص

  1. ضمن نهج مخصصة، حدد B2C_1A_CONTOSOCUSTOMPOLICY.

  2. بالنسبة إلى Select application في صفحة النظرة العامة للنهج المخصص، حدد تطبيق الويب مثل webapp1 الذي قمت بتسجيله مسبقا. تأكد من تعيين قيمة تحديد عنوان URL للرد إلىhttps://jwt.ms.

  3. حدد الزر تشغيل الآن .

  4. أدخل الاسم المعطى واللقاب.

  5. حدد نوع الحساب.

  6. بالنسبة إلى عنوان البريد الإلكتروني، أدخل قيمة بريد إلكتروني غير منسقة بشكل جيد مثل maurice@contoso.

  7. بالنسبة إلى كلمة المرور، أدخل قيمة كلمة المرور التي لا تمتثل لجميع خصائص كلمة المرور القوية كما هو محدد.

  8. حدد زر متابعة . سترى شاشة مشابهة للشاشة الموضحة أدناه:

    screenshot of validating user inputs.

    يجب تصحيح الإدخالات قبل المتابعة.

  9. أدخل القيم الصحيحة كما اقترحتها رسائل الخطأ، ثم حدد الزر متابعة مرة أخرى. بعد انتهاء النهج من التنفيذ، تتم إعادة توجيهك إلى https://jwt.ms، وترى رمز JWT المميز الذي تم فك ترميزه. يبدو الرمز المميز مشابها لمقتطف الرمز المميز JWT التالي:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "c7ae4515-f7a7....",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      "accountType": "work",
      ...
      "email": "maurice@contoso.com",
      "name": "Maurice Paulet",
      "message": "Hello Maurice Paulet"
    }.[Signature]

الخطوة 7 - التحقق من صحة إدخال المستخدم باستخدام ملفات التعريف التقنية للتحقق من الصحة

لا تنطبق تقنيات التحقق من الصحة التي استخدمناها في الخطوة 1 والخطوة 2 والخطوة 3 على جميع السيناريوهات. إذا كانت قواعد عملك معقدة ليتم تعريفها على مستوى إعلان المطالبة، يمكنك تكوين Validation Technical، ثم استدعائه من ملف تعريف تقني مؤكد ذاتيا.

إشعار

يمكن فقط لملفات التعريف الفنية المؤكدة ذاتياً استخدام ملفات التعريف الفنية للتحقق. تعرف على المزيد حول ملف التعريف التقني للتحقق من الصحة

نظرة عامة على السيناريو

نحن نطلب، إذا كان نوع حساب المستخدم هو حساب موظف Contoso، فيجب علينا التأكد من أن مجال البريد الإلكتروني الخاص به يستند إلى مجموعة من المجالات المعرفة مسبقا. هذه المجالات contoso.com fabrikam.com woodgrove.com. وإلا، نعرض خطأ للمستخدم حتى يستخدم حساب موظف Contoso صالحا أو التبديل إلى حساب شخصي.

استخدم الخطوات التالية لمعرفة كيفية التحقق من صحة إدخال المستخدم باستخدام ملفات التعريف الفنية للتحقق من الصحة. يمكنك استخدام ملف تعريف تقني للتحقق من صحة نوع تحويل المطالبات، ولكن يمكنك أيضا استدعاء خدمة REST API للتحقق من صحة البيانات كما ستتعلم لاحقا في هذه السلسلة.

  1. في القسم الخاص بك ClaimsSchema من الملف الخاص بك ContosoCustomPolicy.XML ، قم بتعريف مطالبات المجال و domainStatus باستخدام التعليمات البرمجية التالية:

        <ClaimType Id="domain">
          <DataType>string</DataType>
        </ClaimType>
    
        <ClaimType Id="domainStatus">
          <DataType>string</DataType>
        </ClaimType>
    
  2. ClaimsTransformations حدد موقع القسم، وقم بتكوين تحويلات المطالبات باستخدام التعليمات البرمجية التالية:

        <ClaimsTransformation Id="GetDomainFromEmail" TransformationMethod="ParseDomain">
            <InputClaims>
                <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="emailAddress"/>
            </InputClaims>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="domain" TransformationClaimType="domain"/>
            </OutputClaims>
        </ClaimsTransformation>
        <ClaimsTransformation Id="LookupDomain" TransformationMethod="LookupValue">
            <InputClaims>
                <InputClaim ClaimTypeReferenceId="domain" TransformationClaimType="inputParameterId"/>
            </InputClaims>
            <InputParameters>
                <InputParameter Id="contoso.com" DataType="string" Value="valid"/>
                <InputParameter Id="fabrikam.com" DataType="string" Value="valid"/>
                <InputParameter Id="woodgrove.com" DataType="string" Value="valid"/>
                <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="true"/>
            </InputParameters>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="domainStatus" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation>
    

    يستخرج تحويل مطالبات GetDomainFromEmail مجالا من البريد الإلكتروني باستخدام أسلوب ParseDomain ويخزنه في مطالبة المجال . يستخدم LookupDomain Claims Transformation المجال المستخرج للتحقق مما إذا كان صالحا من خلال البحث عنه في المجالات المعرفة مسبقا، وتعيين صالح لمطالبة domainStatus.

  3. استخدم التعليمات البرمجية التالية لإضافة ملف تعريف تقني في نفس موفر المطالبات مثل ملف التعريف التقني مع Id=UserInformationCollector:

        <TechnicalProfile Id="CheckCompanyDomain">
            <DisplayName>Check Company validity </DisplayName>
            <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <InputClaimsTransformations>
                <InputClaimsTransformation ReferenceId="GetDomainFromEmail"/>
            </InputClaimsTransformations>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="domain"/>
            </OutputClaims>
            <OutputClaimsTransformations>
                <OutputClaimsTransformation ReferenceId="LookupDomain"/>
            </OutputClaimsTransformations>
        </TechnicalProfile>
    

    لقد أعلنا عن ملف التعريف التقني لتحويل المطالبات، والذي ينفذ تحويلات مطالبات GetDomainFromEmail و LookupDomain .

  4. حدد موقع ملف التعريف الفني مع Id=UserInformationCollector، وبعد ValidationTechnicalProfile العنصر باستخدام OutputClaims التعليمات البرمجية التالية:

        <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="CheckCompanyDomain">
                <Preconditions>
                    <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
                        <Value>accountType</Value>
                        <Value>work</Value>
                        <Action>SkipThisValidationTechnicalProfile</Action>
                    </Precondition>
                </Preconditions>
            </ValidationTechnicalProfile>
        </ValidationTechnicalProfiles>
    

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

  5. حدد موقع ملف التعريف الفني باستخدام Id=UserInformationCollector، وأضف التعليمات البرمجية التالية داخل العلامة metadata .

        <Item Key="LookupNotFound">The provided email address isn't a valid Contoso Employee email.</Item>
    

    لقد قمنا بإعداد خطأ مخصص في حالة عدم استخدام المستخدم لرسائل بريد إلكتروني صالحة.

  6. اتبع الإرشادات الواردة في تحميل ملف النهج المخصص لتحميل ملف النهج الخاص بك.

  7. اتبع الإرشادات الواردة في الخطوة 6 لاختبار النهج المخصص:

    1. بالنسبة إلى نوع الحساب، حدد حساب موظف Contoso
    2. بالنسبة إلى عنوان البريد الإلكتروني، أدخل عنوان بريد إلكتروني غير صالح مثل maurice@fourthcoffee.com.
    3. أدخل بقية التفاصيل كما هو مطلوب وحدد متابعة

    نظرا لأن maurice@fourthcoffee.com ليس بريدا إلكترونيا صالحا، فسترى خطأ مشابها للخطأ الموضح في لقطة الشاشة أدناه. يجب استخدام عنوان بريد إلكتروني صالح لتشغيل النهج المخصص بنجاح وتلقي رمز JWT المميز.

    screenshot of error due to invalid email address.

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