بارادايس كوداستوديو برمجيات
العودة إلى المقالات
الأمانتحديث ١٧ دقيقة قراءة

المصادقة باستخدام JWT وRefresh Tokens وRBAC في NestJS

تصميم تدفقات الوصول/التحديث، وتدوير الرمز المميز، وإلغاء الجلسة، والتحقق من الدور/الأذونات دون تشتيت منطق الأمان عبر وحدات التحكم.

JWTNestJSRBACالمصادقةحماية

علي مرتضوي

مؤسس بارادايس كود

وصول قصير الأمد، تحديث محمي

يجب أن تستمر رموز الوصول لمدة دقائق، وليس أيام، وتحمل فقط المطالبات المطلوبة: `sub` أو `tenantId` أو الأدوار أو إصدار الإذن. تستمر الرموز المميزة للتحديث لفترة أطول ولكنها تحتاج إلى تخزين أكثر أمانًا - ملفات تعريف الارتباط httpOnly مع Secure/SameSite المناسب، أو التخزين الآمن الصارم للهاتف المحمول - ويجب أن تكون قابلة للإلغاء من جانب الخادم.

تعمل JWTs عديمة الجنسية بشكل جيد للوصول؛ للتحديث، بدون التتبع من جانب الخادم (سجل الرمز المميز، أو عائلة الرمز المميز، أو قائمة الإلغاء) لا يمكنك احتواء السرقة.

تحديث التدوير وكشف السرقة

عند كل استخدام للتحديث، قم بإلغاء الرمز المميز القديم وإصدار رمز جديد (التناوب). إذا تمت إعادة استخدام رمز مميز تم إبطاله، فقم بإلغاء مجموعة الجلسة بأكملها - وهذه إشارة إعادة تشغيل/سرقة كلاسيكية. وهذا أكثر أمانًا بكثير من "التحديث مرة واحدة إلى الأبد".

احتفظ بالبيانات التعريفية للجلسة: وكيل المستخدم، عنوان IP التقريبي، الذي تم إنشاؤه في، آخر استخدام. السماح للمستخدمين "بتسجيل الخروج من كل مكان"؛ هذه ميزة أمان وليست ترفًا في الإعدادات.

RBAC وأذونات المنتج الحقيقي

الأدوار وحدها لا تكفي. قم بتعيين الأدوار إلى الأذونات الثابتة (`invoice:read`، `invoice:write`). في Nest، قم ببناء حراس على الأذونات، وليس سلاسل الأدوار المضمنة في كل وحدة تحكم. يمكن أن يكون مصدر الإذن الحقيقي عبارة عن إصدار JWT مضغوط بالإضافة إلى ذاكرة تخزين مؤقت، أو قاعدة بيانات يتم التحكم فيها للقراءة للعمليات الحساسة.

في SaaS متعدد المستأجرين، تكون الأدوار ذات معنى داخل المستأجر. لا تقم مطلقًا بتقييم الإذن بدون "tenantId". تنتمي اختبارات IDOR إلى CI الأمني ​​الخاص بك.

طبقات العش: وحدة مصادقة نظيفة

حافظ على إستراتيجيات Passport/JWT رقيقة: قم باستخراج الرمز المميز، والتحقق من التوقيع، وتحميل سياق المستخدم. اترك قواعد عمل تسجيل الدخول وعمليات التأمين والتدقيق في خدمات المجال. مسارات تسجيل الدخول/التحديث/نسيت كلمة المرور ذات الحد الأقصى للمعدل.

قم بتطبيع الأخطاء لتقليل أوراكل - "بريد إلكتروني أو كلمة مرور غير صالحة" بدلاً من الكشف عن وجود الحساب في كل مسار - متوازنًا مع تجربة المستخدم التي يقبلها منتجك. بالنسبة للمسارات الحساسة، احتفظ بسجلات الأمان بدون كلمات مرور أو معلومات تعريف شخصية زائدة.

تخزين الرمز المميز على الويب والهاتف المحمول

في منتجعات الويب SPA، يعد الوصول إلى الذاكرة بالإضافة إلى التحديث في ملف تعريف الارتباط httpOnly نمطًا شائعًا يجعل سرقة XSS للتحديث أكثر صعوبة - مع مطابقة حماية CSRF. عادةً ما يكون التخزين المحلي للتحديث خاطئًا. على الهاتف المحمول، استخدم التخزين الآمن لنظام التشغيل.

حافظ على الحد الأدنى من نطاقات CORS وملفات تعريف الارتباط. يؤدي المجال المفتوح بشكل مفرط إلى إلغاء نموذج الأمان.

الإلغاء وتغييرات كلمة المرور والأحداث الأمنية

يجب أن تؤدي تغييرات كلمة المرور أو ترقيات الأدوار أو اكتشاف الحالات الشاذة إلى إلغاء الجلسات أو انتهاء صلاحية الوصول عاجلاً (على سبيل المثال، مستخدم "tokenVersion"). الاعتماد فقط على انتهاء صلاحية الوصول لا يكفي.

بالنسبة للعمليات الحساسة (تغيير البريد الإلكتروني، صرف الأموال)، فكر في إعادة المصادقة أو التصعيد باستخدام عامل ثانٍ. RBAC يحد من الوصول؛ حساسية العملية تحتاج إلى طبقة أخرى.

قائمة مراجعة ما قبل الإنتاج

قم بمراجعة خوارزميات التوقيع الحديثة، وتدوير المفاتيح، والأسرار في بيئة قبو/آمنة، وتدوير التحديث الذي تم اختباره، ومسار تسجيل الخروج العام. تعامل مع اختبارات اختراق المصادقة على محمل الجد مثل الميزات التجارية.

يعد أمان المصادقة بمثابة لحظة العلامة التجارية: هناك خطأ واحد يكسر الثقة في المنتج بأكمله. في التطبيقات الجادة، يتم قفل هذه الطبقة قبل تلميع واجهة المستخدم.

الأسئلة الشائعة

ما هو عمر رمز الوصول الجيد؟

في كثير من الأحيان 5-15 دقيقة للويب. يكون الأقصر أكثر أمانًا عندما يكون تدفق التحديث وتجربة المستخدم سلسين.

هل رمز تحديث JWT كافٍ بدون مساحة تخزين على الخادم؟

ليس لنموذج قوي. أنت بحاجة على الأقل إلى تتبع/إلغاء من جانب الخادم أو عائلة رمزية.

هل تريد وضع الأذونات في JWT أو قراءة قاعدة البيانات في كل مرة؟

بالنسبة للمسارات الساخنة أو المطالبات المدمجة أو ذاكرة التخزين المؤقت ذات الإصدار؛ بالنسبة للعمليات الحساسة، فحوصات جديدة ضد مصدر الحقيقة.

هل SameSite=Lax كافي؟

يعتمد ذلك على نموذج المواقع المشتركة لديك. غالبًا ما تجمع ملفات تعريف الارتباط الحساسة بين Strict أو Lax ورمز CSRF المميز. تصميم لتلبية الاحتياجات الحقيقية لمنتجك.

المعرفة والمقالات

تحتاج تطبيق هذه المفاهيم في منتجك؟

بارادايس كود معك من الاستشارة حتى التسليم الكامل.

اطلب التعاون