NahdaAIنهضة
Node.js • المستوى الثالث • الدرس 4

التوثيق وحماية المسارات بـ JWT (JSON Web Tokens)

العودة لفهرس المستوى

أهداف الدرس العلمية

  • فهم معمارية الـ Stateless Authentication باستخدام رموز JWT.
  • توليد والتحقق من التوكن لحماية المسارات وواجهات APIs الخاصة.
  • بنية JWT الثلاثية: Header.Payload.Signature.
  • التحقق من التوقيع لمنع التلاعب + انتهاء الصلاحية.

1. ما هو JWT؟

هو معيار مفتوح مشفر (RFC 7519) يتيح نقل البيانات بين طرفين بأمان، ويُستخدم للتحقق من هويات المستعملين وصلاحياتهم في تطبيقات الويب والجوال.

bash
الجانب الأول: Header (Base64)
{ "alg": "HS256", "typ": "JWT" }
        ↓
الجانب الثاني: Payload (Base64)
{ "userId": 101, "role": "admin", "exp": 1730000000 }
        ↓
الجانب الثالث: Signature (HMAC-SHA256)
HMACSHA256(header.payload, SECRET_KEY)

╔═══════════════════════════════════════╗
║ eyJhbGciOi...eyJ1c2Vy...SflKxwRJ... ║
╚═══════════════════════════════════════╝

2. لماذا JWT آمن؟

🔏 Signature

أي تعديل في Payload يُبطل التوقيع فوراً.

⏱️ Expiry (exp)

صلاحية محدودة زمنياً تمنع الاستخدام المستمر.

🔐 Secret Key

المفتاح السري موجود فقط على الخادم.

التطبيق العملي المباشر

تحدي الدرس الرابع: اكتشاف التلاعب وانتهاء الصلاحية

قم بالتعديل على الكود في المحرر أدناه:

  1. أضف خاصية exp إلى payload بقيمة now + 3600.
  2. أضف خاصية iat إلى payload بقيمة now.
  3. أضف التحقق من انتهاء الصلاحية في verifyToken.
  4. أضف اختباراً لرمز منتهي الصلاحية بـ expiresIn = -10.
  5. أضف اختباراً لرمز مُعدَّل يدوياً (Tampered) واكتشف رفضه.
⏳ جارٍ تحميل المحرر التفاعلي...