مقدمة
تتطلب تطبيقات الويب وواجهات API الحديثة نظامًا قويًا ومرنًا للمصادقة. أصبح OAuth 2.0 و OpenID Connect المعيار الفعلي لهذه المهمة. لكن تنفيذها يتطلب مراعاة العديد من التفاصيل الدقيقة المتعلقة بالأمان. تم إنشاء مكتبة Authlib لتبسيط هذه العملية في بايثون.
Authlib هي مكتبة شاملة للمصادقة باستخدام OAuth و OpenID Connect، تتيح لك دمج المصادقة عبر خدمات الطرف الثالث بسرعة وأمان، بالإضافة إلى إنشاء خادم OAuth خاص بك. في هذه المقالة، سنستعرض بالتفصيل كيفية استخدام Authlib عمليًا، وما هي الإمكانيات التي توفرها، وكيفية تجنب الأخطاء الشائعة.
أساسيات OAuth و OpenID Connect
مبادئ عمل البروتوكولات
OAuth 2.0 هو بروتوكول تفويض يسمح للتطبيق بالوصول إلى موارد المستخدم دون نقل اسم المستخدم وكلمة المرور الخاصة به. بدلاً من ذلك، يتم استخدام رموز وصول مؤقتة يمكن أن تكون محدودة المدة والنطاق.
OpenID Connect (OIDC) هو امتداد لـ OAuth 2.0 يضيف طبقة مصادقة. من خلاله، لا يمكنك فقط الوصول إلى الموارد، بل أيضًا تأكيد هوية المستخدم والحصول على معلومات عنه.
الفرق بين OAuth و OpenID Connect
يتيح OAuth 2.0 الوصول إلى واجهات API لخدمات الطرف الثالث (مثل قائمة الملفات في Google Drive، النشر على وسائل التواصل الاجتماعي)، لكنه لا يوفر معلومات عن المستخدم.
يوفر OpenID Connect معلومات منظمة عن المستخدم (البريد الإلكتروني، الاسم، صورة الملف الشخصي، إلخ) من خلال رموز ID ونقطة نهاية معلومات المستخدم (userinfo endpoint).
الأدوار الرئيسية في OAuth 2.0
- مالك المورد (Resource Owner) — مالك المورد (عادةً المستخدم)
- العميل (Client) — التطبيق الذي يطلب الوصول إلى المورد
- خادم التفويض (Authorization Server) — الخادم الذي يوثق المستخدم ويصدر الرموز
- خادم المورد (Resource Server) — الخادم الذي يخزن الموارد المحمية
نظرة عامة على مكتبة Authlib
تاريخ وأهداف المشروع
تم إنشاء Authlib بواسطة Lepture (Hsiaoming Yang)، وهو أيضًا مؤلف مكتبات بايثون شائعة أخرى. تم إطلاق المشروع في عام 2017 بهدف إنشاء حل شامل لـ OAuth و OpenID Connect في نظام بايثون البيئي.
على عكس العديد من المكتبات الأخرى، تقدم Authlib واجهة برمجة تطبيقات (API) موحدة لكل من العميل والخادم، بالإضافة إلى دعم أحدث معايير الأمان. المكتبة في تطور نشط وتحظى بدعم المجتمع.
الميزات الرئيسية لـ Authlib
- دعم كامل للمعايير: OAuth 1.0a، OAuth 2.0، OpenID Connect 1.0
- إمكانيات تشفير: JWT، JWS، JWK، JWE
- تكاملات جاهزة: Flask، Django، Starlette، FastAPI
- الأمان الافتراضي: PKCE، التحقق من الحالة (state validation)، التحقق من nonce
- المرونة: إمكانية إنشاء حلول للعميل والخادم على حد سواء
هندسة المكتبة
تم بناء Authlib بطريقة معيارية:
- Core — الفئات والوظائف الأساسية للعمل مع البروتوكولات
- Integrations — التكاملات مع أطر الويب
- JOSE — العمل مع JSON Web Tokens والتشفير
- OAuth1/OAuth2 — تنفيذ بروتوكولات OAuth
- OIDC — امتدادات لـ OpenID Connect
تثبيت وإعداد Authlib الأساسي
التثبيت عبر pip
pip install Authlib
التبعيات الإضافية
للعمل مع أطر الويب المختلفة، قد تحتاج إلى تثبيت حزم إضافية:
# لـ Flask
pip install Authlib[flask]
# لـ FastAPI/Starlette
pip install Authlib[starlette]