إيجي تاج · اعرف. ناقش. جرّب. نفّذ.

Sessions أم Tokens لتسجيل الدخول؟ مقارنة معمارية قبل اختيار JWT

Sessions أم Tokens لتسجيل الدخول؟ مقارنة معمارية قبل اختيار JWT

مقارنة بين server-side sessions و Access/Refresh tokens من حيث الإبطال والتوسع والمتصفح والتطبيقات، ولماذا JWT ليست ترقية تلقائية.

مقارنة مباشرة

مقارنة بين server-side sessions وAccess/Refresh tokens من حيث الإبطال والتوسع والمتصفح والتطبيقات، ولماذا JWT ليست ترقية تلقائية.

2خيارات
4معايير

اختيار Sessions أو Tokens ليس مسابقة بين قديم وحديث. كلاهما طريقة لحمل حالة المصادقة بين الطلبات، لكن مكان حفظ الحالة وكيفية الإبطال وال ـclients المستهدفة يختلف. تطبيق ويب تقليدي قد يكون أبسط وأأمن باستخدام Session cookie HttpOnly، بينما API تخدم تطبيقات متعددة قد تستفيد من Access tokens قصيرة العمر. المشكلة تبدأ عندما تُختار JWT لمجرد تجنب Session store بدون حساب تكلفة revocation وإدارة refresh tokens.

Server-side Session تجعل الإبطال مركزيًا

المتصفح يحمل Session ID عشوائية في Cookie، والخادم يخزن الحالة المرتبطة بها. عند logout أو تعطيل الحساب تستطيع حذف session فورًا. المقابل هو الحاجة إلى shared session store أو sticky architecture عند التوسع.

Access Token تنقل بعض الحالة إلى credential

Access token قد تكون opaque أو JWT. Resource server تتحقق منها وتطبق scopes/audience. JWT stateless تقلل lookup في بعض التصاميم، لكن token المسروقة تظل صالحة حتى expiry ما لم تضف revocation أو تحققًا إضافيًا.

Refresh Token هي الجزء الأكثر حساسية

لتجنب Access token طويلة العمر، يستخدم النظام Refresh token لإصدار Access جديدة. يجب حمايتها وتدويرها وإبطالها عند logout أو compromise. وضع Refresh token طويلة العمر في LocalStorage يوسع أثر XSS.

خطوات عملية

  1. حدد client type.
  2. حدد عمر Access token.
  3. حدد مكان Refresh token.
  4. صمم rotation/revocation.
  5. اختبر logout من كل الأجهزة.
  6. اختبر سرقة credential في threat model.

Browser app لا تحتاج JWT دائمًا

إذا Frontend و Backend تحت نفس origin أو نفس التطبيق، Session cookie قد تكون أبسط وتمنع تعقيد تخزين tokens في JavaScript. JWT مفيدة عندما تحتاج claims موزعة أو APIs متعددة، لكن لا تجعلها هدفًا بذاتها.

CSRF و XSS تختلف حسب التخزين

Cookie تُرسل تلقائيًا، لذلك تحتاج SameSite و CSRF defenses في الحالات المناسبة. Token تُضاف يدويًا غالبًا، ما يقلل بعض CSRF لكنه قد يعرضها أكثر ل ـXSS إذا خُزنت بطريقة يستطيع JS الوصول إليها. لا يوجد خيار يلغي بقية الدفاعات.

اختر على أساس المتطلبات

اسأل: هل نحتاج revoke فوري؟ كم client؟ هل هناك mobile/native؟ هل APIs مستقلة؟ هل نحتاج SSO/OIDC؟ ما العمر المقبول للاعتماد؟ ثم اختر النموذج الأقل تعقيدًا الذي يحقق المطلوب.

قائمة مراجعة

  • Logout حقيقي مختبر.
  • سرقة token ضمن threat model.
  • CSRF/XSS controls موجودة.
  • expiry معقولة.
  • refresh rotation إن استخدمت.
  • audience/scopes واضحة.

Sessions مقابل Tokens

المعيارSessionsTokens
مكان الحالةحالة الجلسة الأساسية محفوظة على الخادم ويملك العميل معرفًايحمل العميل token يمثل التفويض أو claims بحسب التصميم
الإلغاء والتحكميمكن تعطيل الجلسة مركزيًا من مخزن الخادميعتمد الإلغاء على عمر الرمز والتصميم وقوائم الإبطال عند الحاجة
التوسعقد يحتاج مخزن جلسات مشتركًا بين الخوادمقد يقلل lookup المركزي لكنه يضيف إدارة مفاتيح ودورة حياة
الاختيارمناسب عندما يكون التحكم المركزي المباشر مهمًامفيد لل ـAPIs والأنظمة الموزعة عند ضبط الجمهور والنطاق والعمر
هل تريد الاحتفاظ بالمقال أو إعادة استخدامه؟
مجتمع إيجي تاجعن المجتمع

شارك في تقييم ونقاش المقال

رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.

تفاعل مع المقالاختر التفاعل المناسب، ويمكنك تغيير رأيك لاحقًا.
قيّم جودة المقاللا توجد تقييمات بعد — كن أول من يقيّم.

نقاش القراء

النقاش

جارٍ تحميل التعليقات…

بعد هذه المادة

تابع القراءة

كل مواد #البرمجة وتطوير الويب
مرتبطة بنفس الوسوم04
  1. 02
  2. 03
  3. 04
اختيار القراء

الأكثر قراءة

الترتيب الكامل
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
يتجدد مع النشر

أحدث المواد

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06