CIAM 102: التفويض والتحكم في الوصول القائم على الأدوار
التنظيم والمستأجر رائعان لتجميع الهويات، ولكن يؤديان إلى ديمقراطية مطلقة: يمكن للجميع فعل أي شيء في هذا النظام. بينما لا تزال المدينة الفاضلة لغزًا، دعونا نلقي نظرة على حوكمة الوصول: التفويض (AuthZ).
GaoFounder
توقف عن إضاعة أسابيع في مصادقة المستخدم
أطلق تطبيقات آمنة بشكل أسرع مع Logto. قم بدمج مصادقة المستخدم في دقائق وركز على منتجك الأساسي.
في المقال السابق، قدمنا مفهوم المصادقة (AuthN) والتفويض (AuthZ)، إلى جانب بعض المصطلحات المعجزة: الهوية، المنظمة، المستأجر، إلخ.
التنظيم والمستأجر رائعان لتجميع الهويات، ولكن يؤديان إلى ديمقراطية مطلقة: يمكن للجميع فعل أي شيء في هذا النظام. بينما لا تزال المدينة الفاضلة لغزًا، دعونا نلقي نظرة على حوكمة الوصول: التفويض (AuthZ).
البرنامج Notion مثال رائع. لكل صفحة تملكها، يمكنك اختيار إبقائها خاصة، متاحة لك فقط، أو مشاركتها مع الأصدقاء، أو حتى العامة.
أو، بالنسبة لمتجر كتب على الإنترنت، تريد أن يتاح للجميع عرض جميع الكتب، ولكن أن يتمكن العملاء فقط من عرض طلباتهم الخاصة، والبائعون من إدارة الكتب في متاجرهم فقط.
AuthZ و AuthN هما مكونات أساسية لنموذج أعمال معقد. غالبًا ما يسيران جنبًا إلى جنب؛ AuthZ يتحقق من وصول المستخدم، بينما AuthN يصادق على الهويات. كلاهما ضروري لنظام آمن.
إليك واحد من أكثر نماذج AuthZ شيوعًا: إذا كان الهوية ينفذ الفعل على المورد، فحينئذٍ قبول أو رفض.
في مثال Notion، النموذج هو الشخص ينفذ عرض على الصفحة.
إذا كانت الصفحة خاصة:
ستتلقى قبول عند تنفيذ عرض على صفحتك.
يجب أن يتلقى الجميع رفض عند تنفيذ عرض على صفحتك.
بناءً على التوافق، طورت الصناعة تقنيات تفويض متنوعة، مثل التحكم في الوصول القائم على الأدوار (RBAC)، والتحكم في الوصول القائم على السمات (ABAC). اليوم، سنركز على نموذج NIST RBAC المستوى 1: RBAC المسطح.
تمامًا مثل تعيين الدور للإذن، فإن تعيين المستخدم للدور هو أيضًا علاقة عديدة لعديد. لذلك، يمكنك تخصيص أدوار متعددة لمستخدم واحد، ويمكن تخصيص دور واحد لعدة مستخدمين.
إليك رسم بياني كامل للعلاقات لنموذج RBAC المستوى 1 في Logto:
في نموذج RBAC، تكون الأذونات دائمًا "إيجابية"، مما يعني أن حكم التفويض بسيط: إذا كان لدى المستخدم الإذن، فاقبل؛ والا، ارفض.
لنقل أن أليس لديها دور بائع، بوب وكارول لديهما دور عميل. سنصف الأفعال بلغة طبيعية أولاً، ونحولها إلى تنسيق التفويض القياسي: الهوية ينفذ الفعل على المورد، وأخيرًا نعطي النتيجة.
تريد أليس إضافة كتاب جديد للبيع:
المستخدم أليس ينفذ إنشاء على مورد الكتب (https://api.bookstore.io/books).
نظرًا لأنه تم تخصيص الإذن إنشاء للكتب لأليس وفقًا لدورها بائع، النتيجة هي ✅ قبول.
تريد أليس عرض جميع الطلبات لمعرفة ما إذا كانت المبيعات تفي بتوقعاتها:
المستخدم أليس ينفذ قراءة على مورد الطلبات (https://api.bookstore.io/orders).
نظرًا لأنه تم تخصيص الإذن قراءة للطلبات لأليس وفقًا لدورها بائع، النتيجة هي ✅ قبول.
يريد بوب تصفح قائمة الكتب لمعرفة ما إذا كانت هناك كتب يرغب في شرائها.
المستخدم بوب ينفذ قراءة على مورد الكتب (https://api.bookstore.io/books).
نظرًا لأنه تم تخصيص الإذن قراءة للكتب لبوب وفقًا لدوره عميل، النتيجة هي ✅ قبول.
يريد بوب عرض طلب كارول.
نظرًا لأنه طلب شخص آخر، فإن الإذن قراءة:النفس للطلبات لا يعمل هنا.
المستخدم بوب ينفذ قراءة على مورد الطلبات (https://api.bookstore.io/orders).
نظرًا لعدم امتلاك بوب إذن قراءة للطلبات، النتيجة هي ❌ رفض.