تكوين المصادقة في عينة تطبيق ويب Python باستخدام Microsoft Azure AD B2C

يستخدم هذا المقال عينة تطبيق ويب Python لشرح كيفية إضافة مصادقة Microsoft Azure Active Directory B2C (Azure AD B2C) إلى تطبيقات الويب.

نظرة عامة

OID الاتصال (OIDC) هو بروتوكول مصادقة مبني على OAuth 2.0. يمكنك استخدام OIDC لتسجيل دخول المستخدمين إلى أحد التطبيقات بشكل آمن. يستخدم نموذج تطبيق الويب هذا حزمة الهوية ل Python لتبسيط إضافة دعم المصادقة والتخويل إلى تطبيقات ويب Python.

يتضمن تدفق تسجيل الدخول الخطوات التالية:

  1. يقوم المستخدمون بالانتقال إلى تطبيق الويب وتحديدتسجيل الدخول.
  2. يبدأ التطبيق طلب مصادقة ويعيد توجيه المستخدمين إلىAzure AD B2C.
  3. يقوم المستخدمونبالتسجيل أو تسجيل الدخولأوإعادة ضبط كلمة المرورأو تسجيل الدخول باستخدامحساب اجتماعي.
  4. بعد تسجيل دخول المستخدمين بنجاح، يقوم بإعادة Microsoft Azure AD B2C ومعرف الرمز المميز للتطبيق.
  5. يقوم التطبيق بتبادل التعليمة البرمجية للتخويل مع رمز مميز للمعرف، والتحقق من صحة رمز المعرف، ويقرأ المطالبات، ثم يقوم بإعادة صفحة آمنة للمستخدمين.

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

الخطوة 1: تكوين تدفق المستخدم الخاص بك

عندما يحاول المستخدمون تسجيل الدخول إلى تطبيقك، يبدأ التطبيق في طلب مصادقة لنقطة نهاية التخويل عبر تدفق المستخدم. يحدد تدفق المستخدم تجربة المستخدم ويتحكم فيها. بعد أن يكمل المستخدمون تدفق المستخدم، ينشئ Azure AD B2C رمزًا مميزًا، ثم يعيد توجيه المستخدم مرةً أخرى إلى تطبيقك.

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

  • تسجيل الدخول المشتركة والاشتراك في تدفق المستخدم، مثل susi. يدعم تدفق المستخدم هذا أيضاً تجربة نسيت كلمة المرور الخاصة بك.
  • تدفق تحرير ملف تعريف المستخدم، مثل edit_profile.
  • تدفق إعادة تعيين كلمة مرور المستخدم، مثل reset_password.

يسبق Microsoft Azure AD B2C B2C_1_اسم تدفق المستخدم. على سبيل المثال، يصبح susiB2C_1_susi.

الخطوة 2: سجل تطبيق ويب

لتمكين التطبيق الخاص بك لتسجيل الدخول باستخدام Microsoft Azure AD B2C، قم بتسجيل التطبيق في دليل Microsoft Azure AD B2C. تسجيل التطبيق الخاص بك يؤسس علاقة ثقة بين التطبيق ومتاجرة عمل-مستهلك AAD (دليل Azure النشط).

أثناء تسجيل التطبيق، ستقوم بتحديدإعادة توجيه URI. إعادة توجيه URI هي نقطة النهاية التي تُعيد توجيه المستخدمين من خلال Microsoft Azure AD B2C بعد المصادقة مع Microsoft Azure AD B2C. تنشئ عملية تسجيل التطبيقمعرّف التطبيق، والمعروف أيضًا باسممعرّف العميل، والذي يعرّف التطبيق بشكل فريد. بعد تسجيل التطبيق الخاص بك، يستخدم Microsoft Azure AD B2C معرف التطبيق وURI المعاد توجيهه لإنشاء طلبات المصادقة.

الخطوة 2.1: سجل التطبيق

لإنشاء تسجيل تطبيق الويب، اتبع الخطوات التالية:

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. إذا كان لديك حق الوصول إلى عدة مستأجرين، فحدد رمز الإعدادات في القائمة العلوية للتبديل إلى مستأجر Azure AD B2C من قائمة Directories + subscriptions.

  3. في مدخل Microsoft Azure، ابحث عن Azure AD B2C وحددها.

  4. حدد App registrations، ثم حدد New registration.

  5. ضمنالاسم، أدخل اسمًا للتطبيق (على سبيل المثال، webapp1).

  6. ضمن أنواع الحسابات المدعومة، حدد الحسابات في أي موفر هوية أو دليل تنظيمي (لمصادقة المستخدمين بعمليات سير عمل المستخدمين).

  7. بمقتضىRedirect URI، حددويب، ثم أدخلhttp://localhost:5000/getATokenفي المربع النصي لعنوان URL.

  8. ضمنأذونات الوصول، حدد مربع الاختيارلمنح موافقة المسؤول لفتح أذونات دخول والوصول عند عدم الاتصال بالإنترنت.

  9. حدد تسجيل.

  10. حدد نظرة عامة.

  11. سجّلمعرف التطبيق (لكمبيوتر العميل) لاستخدامه لاحقًا عند تكوين تطبيق الويب.

    Screenshot of the web app Overview page for recording your web app I D.

الخطوة 2.2: إنشاء سر العميل لتطبيق ويب

إنشاء سر عميل لتطبيق الويب المسجل. يستخدم تطبيق الويب سر العميل لإثبات هويته عندما يطلب الرموز.

  1. ضمن "Manage"، حدد "Certificates & secrets".
  2. حدد سر عميل جديد.
  3. في مربع Description، أدخل وصفاً لسر العميل (على سبيل المثال، clientsecret1).
  4. من Expires ، حدد مدة صلاحية السر، ثم حدد Add .
  5. سجّل قيمةالسر. ستستخدم هذه القيمة للتكوين في خطوة لاحقة.

الخطوة 3: احصل على نموذج تطبيق الويب

تنزيل ملف zipأو نسخ عينة تطبيق الويب من GitHub.

git clone https://github.com/Azure-Samples/ms-identity-python-webapp.git

استخراج عينة الملف إلى مجلد حيث الطول الإجمالي للمسار هو 260 حرفًا أو أقل.

الخطوة 4: تكوين عينة تطبيق ويب

في الدليل الجذر للمشروع، اتبع الخطوات التالية:

  1. .env إنشاء ملف في المجلد الجذر للمشروع باستخدام .env.sample كدليل.

    FLASK_DEBUG=True
    B2C_TENANT_NAME=<tenant name>
    CLIENT_ID=<client id>
    CLIENT_SECRET=<client secret>
    SIGNUPSIGNIN_USER_FLOW=B2C_1_signupsignin1
    EDITPROFILE_USER_FLOW=B2C_1_profile_editing
    RESETPASSWORD_USER_FLOW=B2C_1_reset_password
    
    مفتاح القيمة
    B2C_TENANT_NAME الجزء الأول من اسم مستأجر Microsoft Azure Active Directory B2C (على سبيل المثال، contoso).
    CLIENT_ID معرّف تطبيق واجهة برمجة تطبيقات الويب من الخطوة 2.1.
    CLIENT_SECRET قيمة client secret التي أنشأتها في الخطوة 2.2.
    *_USER_FLOW يتدفق المستخدم الذي أنشأته في الخطوة 1.

    تتم الإشارة إلى متغيرات البيئة في app_config.py، ويتم الاحتفاظ بها في ملف .env منفصل لإبعادها عن التحكم بالمصادر. يمنع ملف .gitignore المتوفر إيداع ملف .env.

الخطوة 5: تشغيل عينة تطبيق الويب

  1. في وحدة التحكم أو terminal، قم بالتبديل إلى الدليل الذي يحتوي على العينة. على سبيل المثال:

    cd ms-identity-python-webapp
    
  2. قم بتثبيت الحزم المطلوبة من PyPi وشغل تطبيق الويب على الجهاز المحلي من خلال تشغيل الأوامر التالية:

    python -m pip install -r requirements.txt
    python -m flask run --host localhost --port 5000
    

    تعرض نافذة وحدة التحكم رقم المنفذ للتطبيق قيد التشغيل محليًّا:

     * Debug mode: on
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Running on `http://localhost:5000/` (Press CTRL+C to quit)
    
  3. لعرض تطبيق الويب الذي يعمل على الجهاز المحلي، انتقل إلىhttp://localhost:5000.

  4. حدد"‏‏تسجيل الدخول".

    Screenshot showing the sign-in flow.

  5. قم بإكمال عملية التسجيل أو تسجيل الدخول.

  6. بعد المصادقة الناجحة، سترى الاسم المعروض، كما هو موضح هنا:

    Screenshot showing the web app token's display name claim.

الخطوة 6: الاتصال API ويب

لتمكين التطبيق الخاص بك لتسجيل الدخول باستخدام Microsoft Azure AD B2C واستدعاء API ويب، فيجب عليك تسجيل تطبيقين في دليل Microsoft Azure AD B2C.

  • تطبيق الويب (Python) تسجيل الذي قمت بإنشائه بالفعل فيالخطوة 2. يتيح تسجيل التطبيق هذا للتطبيق تسجيل الدخول باستخدام Microsoft Azure AD B2C. تنشئ عملية تسجيل التطبيقمعرّف التطبيق، والمعروف أيضًا باسممعرّف العميل، والذي يعرّف التطبيق بشكل فريد. على سبيل المثال،معرف التطبيق: 1.

  • يتيح تسجيلAPI ويبلتطبيقك الاتصال API ويب المحمية. يعرض التسجيل أذونات الوصول واجهة برمجة تطبيقات الويب (النطاقات). تنشئ عملية تسجيل التطبيقمعرّف التطبيق، الذي يعرّف API ويب بشكل فريد (على سبيل المثال،معرّف التطبيق: 2). منح التطبيق (معرّف التطبيق: 1) أذونات لنطاقات واجهة برمجة تطبيقات الويب (معرّف التطبيق: 2).

تُوصف تسجيلات التطبيق وتصميم التطبيق في الرسوم التخطيطية التالية:

Diagram describing a web app with web API, registrations, and tokens.

بعد اكتمال المصادقة، يتفاعل المستخدمون مع التطبيق، والذي يستدعي واجهة برمجة تطبيقات ويب محمية. تستخدم واجهة برمجة تطبيقات الويب مصادقة رمز الحامل المميز. رمز الحامل هو الرمز المميز للوصول الذي حصل عليه التطبيق من Microsoft Azure Active Directory B2C. يمرر التطبيق الرمز المميز في رأس التفويض لطلب HTTPS.

Authorization: Bearer <access token>

إذا كان نطاق الرمز المميز للوصول لا يطابق نطاقات واجهة برمجة تطبيقات الويب، تحصل مكتبة المصادقة على رمز مميز للوصول جديد مع النطاقات الصحيحة.

الخطوة 6.1: تسجيل تطبيق API ويب

لإنشاء تسجيل تطبيق واجهة برمجة تطبيقات الويب (App ID: 2)، اتبع الخطوات التالية:

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. تأكد من استخدام الدليل الذي يحتوي على مستأجر Azure AD B2C. حدّد أيقونة الدلائل + الاشتراكات في شريط أدوات المدخل.

  3. في صفحة Portal settings | Directories + subscriptions ابحث عن دليل Azure AD B2C في قائمة Directory name ثم حدّد Switch.

  4. في مدخل Microsoft Azure، ابحث عن Azure AD B2C وحددها.

  5. حدد App registrations، ثم حدد New registration.

  6. تحت Name، أدخل اسمًا للتطبيق (على سبيل المثال، my-api1). اترك القيم الافتراضية لـ Redirect URIوأنواع الحسابات المدعومة.

  7. حدد تسجيل.

  8. بعد اكتمال عملية تسجيل التطبيق، حدد "Overview".

  9. سجل قيمة Application (client) ID لاستخدامه لاحقًا عند تكوين تطبيق الويب.

    Screenshot that demonstrates how to get a web A P I application I D.

الخطوة 6.2: تكوين المجموعة

  1. حدد التطبيق my-api1 الذي أنشأته (App ID: 2) لفتح صفحة Overview الخاصة به.

  2. ضمن إدارة، حدد كشف واجهة برمجة تطبيقات.

  3. بجوار معرف التطبيق URI، حدد رابط تعيين. استبدل القيمة الافتراضية (GUID) باسم فريد (على سبيل المثال، tasks-api) ثم حدد Save.

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

  4. ضمن النطاقات المعرفة من قبل واجهة برمجة التطبيقات API هذه، حدد إضافة نطاق.

  5. لإنشاء نطاق يحدد الوصول للقراءة إلى واجهة برمجة التطبيقات:

    1. بالنسبة إلى اسم النطاق، أدخل المهام.قراءة.
    2. بالنسبة إلى اسم عرض موافقة المسؤول، أدخل قراءة الوصول إلى واجهة برمجة تطبيقات المهام.
    3. بالنسبة إلى وصف موافقة المسؤول، أدخل السماح بالوصول للقراءة إلى واجهة برمجة تطبيقات المهام.
  6. حدد إضافة نطاق.

  7. حدد إضافة نطاق، ثم أضف نطاقًا يحدد حق الوصول للكتابة إلى واجهة برمجة التطبيقات:

    1. بالنسبة إلى اسم النطاق، أدخل features.write.
    2. بالنسبة إلى اسم عرض موافقة المسؤول، أدخل واجهة برمجة تطبيقات الوصول للكتابة إلى المهام.
    3. بالنسبة إلى وصف موافقة المسؤول، أدخل السماح بالوصول للكتابة إلى واجهة برمجة تطبيقات المهام.
  8. حدد إضافة نطاق.

الخطوة 6.3: منح الأذونات الخاصة بتطبيق الويب

لمنح تطبيقك (App ID: 1) أذونات، اتبع الخطوات التالية:

  1. حدد App registrations، ثم حدد التطبيق الذي قمت بإنشائه (معرف التطبيق: 1).

  2. ضمن خانة الإدارة، اختر الأذونات الخاصة بواجهة برمجة التطبيقات.

  3. ضمن أذونات مكونة، حدد إضافة إذن.

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

  5. حدد واجهة برمجة التطبيقات (App ID: 2) التي يجب منح تطبيق الويب حق الوصول إليها. على سبيل المثال، أدخل my-api1.

  6. ضمن Permission، وسّع المهام، ثم حدد النطاقات التي حددتها سابقًا (على سبيل المثال، tasks.read وtasks.write).

  7. حدد إضافة أذونات.

  8. حدد «منح موافقة المسؤول لـ» <اسم المستأجر الخاص بك>.

  9. حدد نعم.

  10. حدد Refresh، ثم تحقق من ظهور منح لـ ... ضمن Status لكلا النطاقين.

  11. من قائمة Configured permissions، حدد النطاق الخاص بك، ثم انسخ الاسم الكامل للنطاق.

    Screenshot of the configured permissions pane, showing that read access permissions are granted.

الخطوة 6.4: تكوين API ويب

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

الخطوة 6.5: تكوين عينة تطبيق مع API ويب

افتح ملف»config.py». يحتوي هذا الملف على معلومات حول موفر الهوية Microsoft Azure AD B2C. قم بتحديث الخصائص التالية لإعدادات التطبيق:

مفتاح القيمة
ENDPOINT URI لـAPI ويب الخاص بك (على سبيل المثال،https://localhost:6000/hello).
SCOPE نطاقات واجهة برمجة تطبيقات الويب التي قمت بإنشائها (على سبيل المثال، ["https://contoso.onmicrosoft.com/tasks-api/tasks.read", https://contoso.onmicrosoft.com/tasks-api/tasks.write"]).

الخطوة 6.6: تشغيل عينة التطبيق

  1. في وحدة التحكم أو terminal، قم بالتبديل إلى الدليل الذي يحتوي على العينة.

  2. إذا لم يكن التطبيق لا يزال قيد التشغيل، فعد تشغيله باستخدام الأمر من الخطوة 5.

  3. حدد استدعاء واجهة برمجة تطبيقات انتقال البيانات من الخادم.

    Screenshot showing how to call a web API.

الخطوة 7: استخدام التطبيق

في التطبيق المنتج، يكون عنوان URI لإعادة توجيه تسجيل التطبيق عادةً نقطة نهاية يمكن الوصول إليها بشكل عام حيث يتم تشغيل التطبيق، مثلhttps://contoso.com/getAToken.

يمكنك إضافة وتعديل عناوين "URI" لإعادة التوجيه في تطبيقاتك المسجلة في أي وقت. تنطبق القيود التالية على إعادة توجيه عناوين "URI":

  • يجب أن يبدأ عنوان URL لإعادة التوجيه بالمخطط https.
  • عنوان URL لإعادة التوجيه حساس لحالة الأحرف. يجب أن تتطابق حالته مع حالة مسار عنوان "URL" للتطبيق قيد التشغيل.

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