Logo Logo
GitHub Designed by Logto

ما هو النطاق (Scope)؟

في بروتوكولات OAuth 2.0 و OpenID Connect (OIDC) ، يعتبر النطاق (Scope) آلية لتحديد الوصول الذي يمتلكه التطبيق إلى موارد المستخدم. يحدد الأذونات التي يطلبها التطبيق من المستخدم.

يتم تمثيل النطاقات كسلاسل يتم تعريفها بواسطة خادم التفويض (authorization server). عندما يطلب تطبيق ما الوصول إلى موارد المستخدم، يحدد النطاقات التي يحتاجها في طلب التفويض (authorization request). ثم يُطلب من المستخدم منح أو رفض هذه الأذونات خلال عملية التفويض.

لماذا نستخدم النطاقات؟

  • التحكم الدقيق في الوصول: تسمح النطاقات للتطبيقات بطلب الأذونات التي يحتاجونها فقط لأداء إجراءات محددة، مما يقلل من خطر الوصول غير المصرح به.
  • موافقة المستخدم: تساعد النطاقات المستخدمين على فهم البيانات التي سيصل إليها التطبيق والسبب.
  • الأمان: تساعد النطاقات في منع التطبيقات من تجاوز أذونات الوصول الخاصة بها، مما يعزز أمان بيانات المستخدم.

كيف يعمل النطاق (Scope)؟

عندما يبدأ تطبيق ما عملية تفويض OAuth 2.0 / OIDC، فإنه يتضمن قائمة من النطاقات في طلب التفويض (authorization request). ثم يعرض خادم التفويض للمستخدم شاشة موافقة تسرد النطاقات المطلوبة. يمكن للمستخدم اختيار منح أو رفض الوصول لكل نطاق. تُستخدم هذه العملية عادة عندما يكون التطبيق تطبيق جهة ثالثة يحتاج إلى الوصول إلى موارد المستخدم.

بدلاً من ذلك، إذا كان التطبيق موثوقًا به من قبل خادم التفويض، قد لا يُطلب من المستخدم الموافقة، بدلاً من ذلك يتم تقديم الموافقة التلقائية ويتم منح جميع النطاقات المطلوبة.

تعريف النطاقات

عادة ما يتم تعريف النطاقات بواسطة مزود API. يمكن أن تكون:

  • نطاقات قياسية: نطاقات شائعة الاستخدام تم تعريفها بواسطة مواصفة OAuth 2.0، يتم مشاركتها بواسطة تطبيقات وخدمات مختلفة. مثل openid، profile، email.
  • نطاقات مخصصة: مخصصة لتطبيق أو خدمة معينة، ومصممة لتلبية متطلباتها الفريدة. مثل read:orders، write:comments.

أين يمكن استخدام النطاقات في OIDC وإدارة الهوية؟

يمكن استخدام النطاقات في جوانب مختلفة من OIDC، بما في ذلك ولكن لا تقتصر على:

  • التوثيق (Authentication): يمكن استخدام النطاقات لطلب معلومات مستخدم محددة خلال عملية التوثيق. مثل profile، email.
  • التفويض (Authorization): يمكن استخدام النطاقات لطلب الوصول إلى موارد محددة أو تنفيذ إجراءات محددة. مثل read:orders، write:comments.
  • الموافقة: يتم تقديم النطاقات للمستخدم خلال شاشة الموافقة لإعلامه بالأذونات المطلوبة من قبل التطبيق.
  • إصدار الرموز (Token issuance): يتم تضمين النطاقات في استجابة الرمز للإشارة إلى الأذونات الممنوحة للتطبيق.
  • التحقق من صحة الرموز (Token validation): يمكن استخدام النطاقات للتحقق من حقوق الوصول الخاصة بالتطبيق عندما يقدم الرمز للوصول إلى الموارد المحمية.
  • خادم الموارد (Resource server): يمكن استخدام النطاقات من قبل خادم الموارد لتطبيق سياسات التحكم في الوصول بناءً على الأذونات الممنوحة للتطبيق.
  • ملف تعريف المستخدم: يمكن استخدام النطاقات لطلب معلومات إضافية عن ملف المستخدم بخلاف المطالبات الأساسية.

أفضل الممارسات

  • طلب الحد الأدنى من النطاقات: اطلب دائمًا مجموعة النطاقات الدنيا اللازمة لتطبيقك للعمل. هذا يقلل من خطر الأذونات الزائدة ويعزز ثقة المستخدم.
  • شرح استخدام النطاقات: اشرح للمستخدمين بوضوح السبب لاحتياج كل نطاق. الشفافية تساعد في الحصول على موافقة المستخدم.
  • استخدام النطاقات القياسية إن أمكن: استغل النطاقات القياسية لضمان التوافق وتقليل التعقيد.

انظر أيضا