OAuth 2.0 وتفويض JWT في PHP: دليل كامل للمبتدئين

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

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

ابدأ الدورة

مقدمة: لماذا نحتاج OAuth 2.0 و JWT في تطبيقات الويب الحديثة؟



في تطوير الويب الحديث، يُعد نقل البيانات بشكل آمن بين العميل والخادم أحد المهام الأساسية. تعمل طرق المصادقة التقليدية، مثل الجلسات المعتمدة على ملفات تعريف الارتباط (cookies)، بشكل جيد للتطبيقات المتجانسة، ولكنها تصبح غير مريحة عند إنشاء REST API أو تطبيقات الجوال أو بنية الخدمات المصغرة. وهنا يأتي دور أداتين قويتين: بروتوكول OAuth 2.0 وتنسيق الرموز JWT (JSON Web Token).



في هذه المقالة، سنشرح المفاهيم الأساسية لـ OAuth 2.0 و JWT، ثم سنقوم خطوة بخطوة بإنشاء نظام تفويض بسيط باستخدام PHP. المقالة موجهة للمطورين المبتدئين، لذا ستكون جميع الشروحات بسيطة قدر الإمكان ومصحوبة بأمثلة عملية للكود.



ما هو OAuth 2.0 وكيف يعمل؟



OAuth 2.0 هو بروتوكول تفويض يسمح للتطبيقات بالحصول على وصول محدود إلى موارد المستخدم دون نقل اسم المستخدم وكلمة المرور الخاصة به. تخيل أنك تريد تسجيل الدخول إلى موقع عبر حساب Google أو Facebook - هذا هو عمل OAuth 2.0.



الأدوار الرئيسية في OAuth 2.0

  • Resource Owner (مالك المورد) — المستخدم الذي يملك البيانات.
  • Client (العميل) — التطبيق الذي يريد الوصول إلى بيانات المستخدم.
  • Authorization Server (خادم التفويض) — الخادم الذي يصدر الرموز بعد المصادقة الناجحة.
  • Resource Server (خادم الموارد) — الخادم الذي يخزن البيانات المحمية ويتحقق من الرموز.


تدفق التفويض (Authorization Code Grant)

أكثر تدفقات OAuth 2.0 شيوعًا وأمانًا يبدو كالتالي:

  1. يقوم العميل بتوجيه المستخدم إلى خادم التفويض.
  2. يقوم المستخدم بتسجيل الدخول ومنح الإذن.
  3. يقوم خادم التفويض بإرجاع authorization code إلى العميل.
  4. يقوم العميل باستبدال الكود بـ access token (رمز الوصول).
  5. باستخدام access token، يتصل العميل بخادم الموارد.


ما هو JWT ولماذا يحظى بشعبية كبيرة؟



JWT (JSON Web Token) هو تنسيق رمز مضغوط ومكتفي ذاتيًا يُستخدم لنقل المعلومات بين الأطراف في شكل كائن JSON. يمكن التحقق من المعلومات الموجودة في JWT والوثوق بها، لأن الرمز موقّع بتوقيع رقمي.



هيكل JWT

يتكون JWT من ثلاثة أجزاء مفصولة بنقاط:

header.payload.signature
  • Header (الرأس) — يحتوي على نوع الرمز (JWT) وخوارزمية التوقيع (مثل HS256 أو RS256).
  • Payload (الحمولة) — يحتوي على البيانات (claims)، مثل معرف المستخدم، الدور، وقت الإنشاء وانتهاء صلاحية الرمز.
  • Signature (التوقيع) — يتم إنشاؤه عن طريق تشفير الرأس والحمولة باستخدام مفتاح سري.


مزايا JWT

  • الاكتفاء الذاتي — يتم تخزين جميع المعلومات الضرورية داخل الرمز، مما يقلل الحمل على قاعدة البيانات.
  • الأمان — الرمز موقّع، لذا لا يمكن تزويره.
  • العالمية — يعمل مع أي لغة برمجة ومنصة.
  • قابلية التوسع — مثالي للخدمات المصغرة والأنظمة الموزعة.


التنفيذ العملي: إنشاء نظام تفويض في PHP



الآن ننتقل إلى الجزء الأكثر إثارة للاهتمام - كتابة الكود. سنقوم بإنشاء سكريبت بسيط بلغة PHP يقوم بإنشاء رمز JWT والتحقق منه مع كل طلب. للعمل مع JWT، سنستخدم مكتبة firebase/php-jwt.



المدونات

توصيات الكتب