ما هو طلب الترخيص (Authorization request)؟
اعتمادًا على السياق، يمكن أن يشير مصطلح “طلب الترخيص (Authorization request)” إلى أشياء مختلفة. في هذه المقالة، سنركز على التعريف في مواصفات OAuth 2.0 .
في OAuth 2.0، هناك عدة أنواع تفويض (تدفقات) تحدد كيف يمكن لـ العميل (Client) الحصول على ترخيص من المستخدم للوصول إلى الموارد المحمية.
![ملاحظة] غالبًا ما يتم الخلط بين “طلبات الترخيص (Authorization requests)” و “طلبات المصادقة (Authentication Requests)” في سياق OpenID Connect (OIDC) . انظر طلب مصادقة (Authentication request) للحصول على تفاصيل خاصة بـ OIDC.
كيف يعمل طلب الترخيص (Authorization request)؟
عندما يريد عميل (تطبيق) الوصول إلى موارد محمية نيابة عن مستخدم، يبدأ طلب ترخيص إلى خادم التفويض (Authorization server) . يجب على العميل تحديد نوع التفويض المطلوب جنبًا إلى جنب مع المعلمات اللازمة في الطلب.
إليك بعض أنواع التفويض (التدفقات) المعتادة لترخيص المستخدم النهائي في OAuth 2.0:
- تدفق رمز التفويض (Authorization code flow) : التدفق الأكثر توصية لترخيص المستخدمين النهائيين. يُستخدم عادةً مع مفتاح إثبات تبادل الكود (Proof Key for Code Exchange, PKCE) لتحسين الأمان وهو مناسب لمعظم التطبيقات.
- تدفق ضمني (Implicit flow) : تدفق مبسط تم إهماله في OAuth 2.1 بسبب القلق من الأمور الأمنية.
- تفويض اعتمادات كلمة مرور مالك المورد (ROPC) : تفويض (تدفق) حيث يتم تبادل بيانات اعتماد المستخدم مباشرة للحصول على رمز وصول. لا يُوصى بهذا التدفق نظرًا لمخاطره الأمنية.
هناك أيضًا امتدادات أخرى، مثل تدفق الجهاز (Device flow) للأجهزة ذات القدرات الإدخال المحدودة. لكل تدفق خصائصه وحالات استخدامه. بالنسبة لمعظم تطبيقات الويب، يُوصَى بتدفق رمز التفويض.
يتم عادةً تنفيذ ترخيص اتصال الآلة بالآلة (Machine-to-machine) باستخدام تدفق بيانات الاعتماد للعميل (Client credentials flow) الذي لا يتضمن تفاعلًا مع المستخدم.
على سبيل المثال، قد يطلب عميل (تطبيق) الترخيص للوصول إلى ملفات Google Drive للمستخدم. إليك رسم بياني مبسط لتدفق رمز الترخيص:
بمجرد الحصول على رمز الوصول (Access token) ، يمكن للعميل استخدامه للوصول إلى ملفات Google Drive الخاصة بالمستخدم نيابة عن المستخدم.
المعلمات الرئيسية في طلب الترخيص (Authorization request)
عادةً ما يتضمن طلب ترخيص OAuth 2.0 المعلمات التالية:
response_type
: نوع الاستجابة التي يتوقعها العميل. القيم الشائعة هيcode
لتدفق رمز الترخيص وtoken
لتدفق الضمني.client_id
: معرف العميل الذي يصدره خادم الترخيص.redirect_uri
: URI حيث يرسل خادم الترخيص المستخدم بعد عملية الترخيص.scope
: النطاقات المطلوبة (الاذونات) لرمز الوصول.resource
: المعلمة الاختيارية التي تحدد مؤشر الموارد (Resource indicator) للموارد المطلوبة. يحتاج خادم الترخيص إلى دعم RFC 8707 لاستخدام هذه المعلمة.
المعلمات المذكورة أعلاه ليست شاملة. تعتمد المعلمات والقيم الفعلية على نوع التفويض ومتطلبات التطبيق الخاصة.