Authlib: مكتبة OAuth 2.0 و OpenID Connect في بايثون

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة

تتطلب تطبيقات الويب وواجهات 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]

توصيات