تأمين واجهة برمجة تطبيقات Azure API Management مع Azure AD B2C

تعرّف على كيفية تقييد الوصول إلى واجهة برمجة تطبيقات Azure API Management للعملاء الذين قاموا بالمصادقة مع Azure Active Directory B2C (Azure AD B2C). اتبع الإرشادات الواردة في هذه المقالة لإنشاء واختبار نهج وارد في Azure API Management الذي يقيد الوصول إلى الطلبات التي تتضمن رمز مميز للوصول صادر من Azure AD B2C صالح.

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

قبل البدء، تأكد من أن لديك الموارد التالية في مكان:

قم بإنشاء معرف تطبيق Azure AD B2C

عند تأمين واجهة برمجة التطبيقات في Azure API Management باستخدام Azure AD B2C، تحتاج إلى قيم متعددة لـ inbound policy التي تقوم بإنشائها في Azure API Management. أولاً، سجل معرف التطبيق الخاص بتطبيق سبق لك إنشاؤه في مستأجر Azure AD B2C. إذا كنت تستخدم التطبيق الذي أنشأته لتلبية المتطلبات الأساسية، فاستخدم معرف التطبيق لـ webapp1.

لتسجيل تطبيق في مستأجر Azure AD B2C، يمكنك استخدام تجربة تسجيلات التطبيق الموحدة الجديدة أو تجربة تطبيقاتنا القديمة . لمزيد من المعلومات حول new registrations experience.

  1. سجل الدخول إلى مدخل Azure.
  2. إذا كان لديك حق الوصول إلى عدة مستأجرين، فحدد رمز الإعدادات في القائمة العلوية للتبديل إلى مستأجر Azure AD B2C من قائمة Directories + subscriptions.
  3. وفي القائمة اليسرى، حدد Azure AD B2C. بدلاً من ذلك، يمكنك تحديد All services ومن ثم البحث عنAzure AD B2Cوتحديده.
  4. حدد App registrations، ثم حدد علامة التبويب الخاصة بـ Owned applications.
  5. سجل القيمة في عمود Application (client) ID لـ webapp1 أو لتطبيق آخر قمت بإنشائه مسبقًا.

احصل على نقاط نهاية مُصدر الرمز المميز

بعد ذلك، احصل على عنوان URL معروف للتهيئة لأحد تدفقات مستخدمي Azure AD B2C. تحتاج أيضًا إلى عنوان URI لنقطة النهاية المُصدر للرمز المميز التي تريد دعمها في Azure API Management.

  1. في Azure portal، انتقل إلى مستأجر Azure AD B2C.

  2. ضمن Policies، حدد User flows.

  3. حدد نهجًا موجودًا حاليًا، على سبيل المثال B2C_1_signupsignin1، ثم حدد Run user flow.

  4. سجل عنوان URL في الارتباط التشعبي الذي يتم عرضه تحت عنوان Run user flow بالقرب من أعلى الصفحة. عنوان URL هذا عبارة عن نقطة النهاية لاكتشاف OpenID Connect معروفة لتدفق المستخدم، وسوف تستخدمها في القسم التالي عند تكوين النهج الوارد في Azure API Management.

    Screenshot of the well-known URI hyperlink on the

  5. حدد الارتباط التشعبي للانتقال إلى صفحة تكوين OpenID Connect معروفة.

  6. في الصفحة التي تفتح في متصفحك، قم بتسجيل قيمة issuer. على سبيل المثال:

    https://<tenant-name>.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

    ستستخدم هذه القيمة في القسم التالي، عند تكوين واجهة برمجة التطبيقات في Azure API Management.

يجب أن يكون لديك الآن عنواني (URLs) مسجلين للاستخدام في القسم التالي: عنوان URL لنقطة نهاية تكوين OpenID Connect المعروفة ومُصدر عنوان URI. على سبيل المثال:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration
https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/

تكوين النهج الوارد في Azure API Management

الآن يمكنك إضافة النهج الوارد في Azure API Management الذي يتحقق من صحة استدعاء واجهة برمجة التطبيقات للنظام. من خلال إضافة نهج JSON web token (JWT) validation الذي يتحقق من الجمهور والمُصدر في الرمز المميز للوصول، يمكنك التأكد من قبول استدعاء واجهة برمجة التطبيقات للنظام التي تحمل رمزًا مميزًا صالحًا فقط.

  1. في Azure portal، انتقل إلى مثيل Azure API Management.

  2. تحديد APIs.

  3. حدد واجهة برمجة التطبيقات التي تريد تأمينها باستخدام Azure AD B2C.

  4. حدد علامة التبويب Design.

  5. ضمن Inbound processing، حدد </> لفتح محرر التعليمة البرمجية للنهج.

  6. ضع العلامة التالية <validate-jwt> داخل النهج <inbound>ثم قم بما يلي:

    أ. قم بتحديث القيمة url في العنصر <openid-config> باستخدام عنوان URL للتكوين المعروف في النهج.
    ب. تحديث العنصر <audience> مع معرف التطبيق للتطبيق الذي قمت بإنشائه سابقًا في مستأجر B2C الخاص بك (على سبيل المثال، webapp1).
    ج. تحديث العنصر<issuer> مع نقطة نهاية مُصدر الرمز المميز الذي سجلته سابقًا.

    <policies>
        <inbound>
            <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
                <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
                <audiences>
                    <audience>44444444-0000-0000-0000-444444444444</audience>
                </audiences>
                <issuers>
                    <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
                </issuers>
            </validate-jwt>
            <base />
        </inbound>
        <backend> <base /> </backend>
        <outbound> <base /> </outbound>
        <on-error> <base /> </on-error>
    </policies>
    

التحقق من صحة الوصول الآمن إلى واجهة برمجة التطبيقات

للتأكد من أن المتصلين المصادقين فقط يمكنهم الوصول إلى واجهة برمجة التطبيقات الخاصة بك، يمكنك التحقق من صحة تكوين Azure API Management عن طريق استدعاء واجهة برمجة التطبيقات باستخدام Postman.

للاتصال بواجهة برمجة التطبيقات، تحتاج إلى رمز مميز للوصول صادر عن Azure AD B2C ومفتاح اشتراك Azure API Management.

طلب رمز مميز للوصول

تحتاج أولا إلى رمز مميز صادر عن Azure AD B2C لاستخدامه في العنوان Authorization في Postman. يمكنك الحصول على واحد باستخدام ميزة تشغيل الآن لتدفق مستخدم الاشتراك/تسجيل الدخول الذي قمت بإنشائه كأحد المتطلبات الأساسية.

  1. في Azure portal، انتقل إلى مستأجر Azure AD B2C.

  2. ضمن Policies، حدد User flows.

  3. حدد تدفق مستخدم التسجيل/تسجيل الدخول الموجود (على سبيل المثال، B2C_1_signupsignin1).

  4. بالنسبة لـ Application، حدد webapp1.

  5. بالنسبة لـ Reply URL، حددhttps://jwt.ms.

  6. حدد سير أنشطة المستخدم.

    Screenshot of the

  7. أكمل عملية تسجيل الدخول. يجب إعادة توجيهك إلى https://jwt.ms.

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

    Screenshot of the encoded token value displayed on jwt.ms.

الحصول على مفتاح اشتراك واجهة برمجة التطبيقات

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

  1. في Azure portal، انتقل إلى مثيل خدمة Azure API Management.
  2. حدد Subscriptions.
  3. حدد القطع الناقص (...) بجوار Product: Unlimited، ثم حدد Show/hide keys.
  4. سجِل Primary Key للمنتج. يمكنك استخدام هذا المفتاح Ocp-Apim-Subscription-Key لعنوان في طلب HTTP الخاص بك في Postman.

Screenshot of the

اختبار استدعاء واجهة برمجة التطبيقات للنظام آمنة

مع الرمز المميز للوصول ومفتاح الاشتراك في Azure API Management المسجلين، الآن إنك جاهز لاختبار ما إذا كنت قد قمت بتكوين الوصول الآمن إلى واجهة برمجة التطبيقات بشكل صحيح.

  1. قم بإنشاء GET طلب جديد في Postman. بالنسبة إلى عنوان URL للطلب، حدد نقطة نهاية قائمة مكبرات الصوت لواجهة برمجة التطبيقات التي نشرتها كأحد المتطلبات الأساسية. على سبيل المثال:

    https://contosoapim.azure-api.net/conference/speakers

  2. بعد ذلك، أضف العناوين التالية:

    مفتاح القيمة‬
    Authorization قيمة الرمز المميز المشفرة التي سجلتها سابقا، بادئة مع Bearer (تضمن المسافة بعد "Bearer")
    Ocp-Apim-Subscription-Key مفتاح الاشتراك في Azure API Management الذي سجلته سابقًا.

    يجب أن يظهر طلب GET لعنوان URL و Headers مشابهة لتلك الموضحة في الصورة التالية:

    Screenshot of the Postman UI showing the GET request URL and headers.

  3. في Postman، حدد الزر Send لتنفيذ الطلب. إذا قمت بتكوين كل شيء بشكل صحيح، يجب أن تحصل على استجابة JSON مع مجموعة من المتحدثين في المؤتمر (موضح هنا، تم اجتزاؤه):

    {
      "collection": {
        "version": "1.0",
        "href": "https://conferenceapi.azurewebsites.net:443/speakers",
        "links": [],
        "items": [
          {
            "href": "https://conferenceapi.azurewebsites.net/speaker/1",
            "data": [
              {
                "name": "Name",
                "value": "Scott Guthrie"
              }
            ],
            "links": [
              {
                "rel": "http://tavis.net/rels/sessions",
                "href": "https://conferenceapi.azurewebsites.net/speaker/1/sessions"
              }
            ]
          },
    [...]
    

اختبار استدعاء واجهة برمجة التطبيقات للنظام غير آمن

الآن بعد أن قمت بإجراء طلب ناجح، اختبر حالة الفشل للتأكد من رفض استدعاء واجهة برمجة التطبيقات الخاصة بك باستخدام رمز مميز غير صالح كما هو متوقع. إحدى الطرق لإجراء الاختبار هي إضافة أو تغيير أحرف قليلة في قيمة الرمز المميز ثم قم بتشغيل نفس الطلب GET كما كان من قبل.

  1. إضافة عدة أحرف إلى قيمة الرمز المميز لمحاكاة رمز مميز غير صالح. على سبيل المثال، يمكنك إضافة "INVALID" إلى قيمة الرمز المميز، كما هو موضح هنا:

    Screenshot of the Headers section of Postman UI showing the string INVALID added to token.

  2. في Postman، حدد الزر Send لتنفيذ الطلب. مع رمز مميز غير صالح، النتيجة المتوقعة هي 401 تعليمة برمجية لحالة غير مصرح به:

    {
        "statusCode": 401,
        "message": "Unauthorized. Access token is missing or invalid."
    }
    

إذا اطلعت على تعليمة الحالة البرمجية 401 فقد تحققت من أنه يمكن للمتصلين فقط الذين لديهم رمز مميز لوصول صالح صادر عن Azure AD B2C تقديم طلبات ناجحة إلى واجهة برمجة تطبيقات Azure API Management.

دعم تطبيقات متعددة والجهات المصدرة

عادة ما تتفاعل العديد من التطبيقات مع REST API واحد. لتمكين واجهة برمجة التطبيقات لقبول الرموز المميزة المخصصة لتطبيقات متعددة، قم بإضافة معرفات التطبيق إلى العنصر <audiences> في نهج Azure API Management الوارد.

<!-- Accept tokens intended for these recipient applications -->
<audiences>
    <audience>44444444-0000-0000-0000-444444444444</audience>
    <audience>66666666-0000-0000-0000-666666666666</audience>
</audiences>

وبالمثل، لدعم العديد من مصدري الرمز المميز، قم بإضافة نقاط النهاية لعناوين URI الخاصة بهم إلى العنصر <issuers> في نهج Azure API Management الواردة.

<!-- Accept tokens from multiple issuers -->
<issuers>
    <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
    <issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
</issuers>

ترحيل إلى b2clogin.com

إذا كان لديك واجهة برمجة التطبيقات Azure API Management التي تتحقق من صحة الرموز المميزة الصادرة عن نقطة النهاية login.microsoftonline.com القديمة، يجب ترحيل واجهة برمجة التطبيقات والتطبيقات التي تستدعيها لاستخدام الرموز المميزة الصادرة عن b2clogin.com.

يمكنك اتباع هذه العملية العامة لتنفيذ ترحيل مرحلي:

  1. قم بإضافة الدعم في نهج Azure API Management الوارد للرموز المميزة الصادرة عن كلاً من b2clogin.com وlogin.microsoftonline.com.
  2. تحديث التطبيقات تدريجيًا للحصول على رموز مميزة من نقطة النهاية b2clogin.com.
  3. بعد حصول كافة تطبيقاتك بشكل صحيح على الرموز المميزة من b2clogin.com، قم بإزالة الدعم للرموز المميزة الصادرة login.microsoftonline.com من واجهة برمجة التطبيقات.

يوضح المثال التالي نهج Azure API Management الوارد كيفية قبول الرموز المميزة التي يتم إصدارها من قبل كل من b2clogin.com و login.microsoftonline.com. بالإضافة إلى ذلك، يدعم النهج طلبات واجهة برمجة التطبيقات من تطبيقين.

<policies>
    <inbound>
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
            <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
            <audiences>
                <audience>44444444-0000-0000-0000-444444444444</audience>
                <audience>66666666-0000-0000-0000-666666666666</audience>
            </audiences>
            <issuers>
                <issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
                <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
            </issuers>
        </validate-jwt>
        <base />
    </inbound>
    <backend> <base /> </backend>
    <outbound> <base /> </outbound>
    <on-error> <base /> </on-error>
</policies>

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

للحصول على معلومات إضافية حول نهج Azure API Management، راجع Azure API Management policy reference index.

للحصول على معلومات حول ترحيل واجهات برمجة تطبيقات الويب المعتمدة على OWIN وتطبيقاتها إلى b2clogin.com، راجع Migrate an OWIN-based web API to b2clogin.com.