ما هو التدفق المختلط (Hybrid flow)؟
التدفق المختلط (Hybrid flow) هو عملية مصادقة (authentication) تجمع بين ميزات تدفق رمز التفويض (Authorization code flow) و تدفق ضمني (Implicit flow) . من الجدير بالذكر أن التدفق المختلط ليس جزءًا من مواصفات OAuth 2.0 ولكنه امتداد يوفره OpenID Connect (OIDC) .
هذا التدفق مصمم لتوفير توازن بين الأمان وسهولة الاستخدام لمصادقة المستخدم (user authentication). ومع ذلك، لا يُنصح باستخدام التدفق المختلط في التطبيقات الجديدة نظرًا للاعتبارات الأمنية المرتبطة بتدفق الضمني (implicit flow). بديل مشهور للتدفق المختلط هو استخدام تدفق رمز التفويض (authorization code flow) مع مفتاح إثبات تبادل الكود (Proof Key for Code Exchange, PKCE) للحصول على أمان أفضل.
كيف يعمل التدفق المختلط (Hybrid flow)؟
إليك الخطوات الرئيسية للتدفق المختلط (Hybrid flow):
-
مشابهًا للعديد من تدفقات OIDC الأخرى، يبدأ التدفق المختلط بواسطة العميل (Client) الذي ينشئ طلب مصادقة (Authentication request) إلى OpenID Provider (OP) .
ملاحظة: يجب أن يتضمن العميل معلمة
response_type
مع مزيج منcode
وواحدة على الأقل منid_token
أوtoken
، مما يعني أن هناك ثلاث مجموعات ممكنة:code id_token
: يتوقع العميل رمز التفويض (authorization code) ورمز التعريف (ID token).code token
: يتوقع العميل رمز التفويض (authorization code) ورمز الوصول (access token).code id_token token
: يتوقع العميل رمز التفويض (authorization code)، ورمز التعريف (ID token)، ورمز الوصول (access token).
المتطلب واضح بذاته: يتوقع العميل رمز التفويض (authorization code) وأحد الرموز أو أكثر، والتي ترتبط بتدفق رمز التفويض (authorization code flow) وتدفق الضمني (implicit flow) على التوالي.
-
يقوم المستخدم بالمصادقة على OpenID Provider (OP) .
-
OpenID Provider (OP) يعيد توجيه المستخدم إلى تطبيق العميل مع رمز التفويض والرموز المطلوبة.
-
يقوم تطبيق العميل بمعالجة الرموز ويمكنه استخدامها للوصول إلى الموارد المحمية نيابة عن المستخدم؛ كما يمكنه استخدام رمز التفويض للحصول على رموز إضافية عبر طلب الرمز (Token request) .
إليك مخطط تسلسل مبسط للتدفق المختلط:
إليك مثال غير معياري لطلب مصادقة التدفق المختلط:
GET /authorize?response_type=code%20id_token
&client_id=YOUR_CLIENT_ID
&redirect_uri=https%3A%2F%2Fclient.example.com%2Fcallback
&scope=openid%20profile%20email
&nonce=123456
&state=abc123 HTTP/1.1
Host: your-openid-provider.com
المعلمات الرئيسية في طلب مصادقة التدفق المختلط (Hybrid flow)
يتضمن طلب مصادقة التدفق المختلط المعلمات الرئيسية التالية:
response_type
: يجب أن تكون القيمة مزيجًا منcode
وواحدة على الأقل منid_token
أوtoken
. على سبيل المثال،code id_token
أوcode token
.client_id
: معرف العميل الصادر عن OpenID Provider (OP) (خادم التفويض).redirect_uri
: URI حيث يقوم خادم التفويض بإرسال المستخدم بعد عملية المصادقة.scope
: النطاقات المطلوبة (الأذونات) للرموز.resource
: معلمة اختيارية تحدد مؤشر الموارد (Resource indicator) للموارد المطلوبة. يحتاج خادم التفويض إلى دعم RFC 8707 لاستخدام هذه المعلمة.
للحصول على القائمة الكاملة للمعلمات ووصفها، انظر التوثيق باستخدام التدفق المختلط .
اعتبارات الأمان
يشمل التدفق المختلط (Hybrid flow) التدفق الضمني (implicit flow)، المعروف بقيود الأمان الخاصة به. لا تزال الرموز تُنقل عبر القناة الأمامية (المتصفح)، مما قد يعرضها للهجمات المحتملة. سيتم إيقاف تدفق الضمني (implicit flow) في OAuth 2.1 بسبب هذه المخاوف.
تدفق رمز التفويض (Authorization code flow) مع مفتاح إثبات تبادل الكود (Proof Key for Code Exchange, PKCE) هو البديل الموصى به للتدفق المختلط (Hybrid flow). يوفر طريقة أكثر أمانًا لمصادقة المستخدمين دون التعرض للرموز في القناة الأمامية.