لو كنت تطور أي تطبيق ويب حديث، فقد مررت حتماً بسلسلة نصوص طويلة تنتهي بنقاط مثل eyJhbGciOiJIUzI1NiJ9.eyJzdWIi... وحاولت فهم ماذا تعني. هذا الدليل يشرح كل ما تحتاجه عملياً عن Base64 وJWT — من الأساسيات إلى الأخطاء الأمنية التي أسقطت شركات كبرى.
الأساس الذي يخلط فيه الجميع: الترميز ≠ التشفير
هذا أهم مفهوم في المقال كله، وفهمه يفرق بين مطور محترف ومبتدئ:
- الترميز (Encoding): تحويل البيانات لصيغة أخرى بدون مفتاح سري — الهدف توافق النقل وليس الحماية. أي شخص يستطيع عكسه. Base64 ترميز.
- التشفير (Encryption): إخفاء البيانات بمفتاح سري — لا يمكن قراءتها بدون المفتاح. AES وRSA تشفير.
قاعدة ذهبية: إذا رأيت كلمة سر أو رقم بطاقة أو بيانات حساسة "مشفرة" بـ Base64 في كود أحد... فهي مكشوفة تماماً. Base64 لا يحمي شيئاً — وظيفته الوحيدة نقل بيانات ثنائية عبر قنوات نصية (بريد إلكتروني، URLs، JSON).
كيف يعمل Base64 داخلياً؟ (في 30 ثانية)
- يأخذ بياناتك كل 3 بايت (24 بت)
- يقسمها إلى 4 مجموعات من 6 بت
- كل مجموعة 6 بت = رقم من 0-63 → يحوّله لحرف من جدول الأحرف الـ64:
A-Z, a-z, 0-9, +, /مع=للحشو
Hello تصبح SGVsbG8=. حجم النص يزيد ~33% (3 بايت تصبح 4) — لهذا لا تستخدم Base64 للملفات الضخمة بلا داعٍ.
Base64URL — النسخة الآمنة للروابط
المشكلة: رمزا + و/ لهما معنى خاص في الروابط. الحل في JWTs: استبدالهما بـ - و_ وإلغاء حشو =. أدواتنا تتعامل مع الصيغتين تلقائياً.
JWT: جواز السفر الرقمي لتطبيقاتك
JSON Web Token هو المعيار القياسي (RFC 7519) لمصادقة APIs الحديثة. عند تسجيل دخول مستخدم، الخادم يمنحه توكناً يحمله معه في كل طلب لاحق — والخادم يثق به دون جلسة مخزنة (Stateless Authentication).
تشريح التوكن: ثلاث قطع مفصولة بنقطتين
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ← Header . eyJ1c2VyX2lkIjoxNDMsInJvbGUiOiJhZG1pbiJ9 ← Payload . SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJVadQssw5c ← Signature
- Header: خوارزمية التوقيع —
{"alg": "HS256", "typ": "JWT"} - Payload: البيانات (Claims): معرف المستخدم، دوره، وقت الانتهاء
exp، المصدرiss... - Signature: بصمة توقيع HMAC أو RSA تضمن أن المحتوى لم يُعدَّل بعد الإصدار
الأجزاء الثلاثة مرمزة Base64URL فقط — أي أن Payload مقروء لأي شخص! جرّبه الآن: انسخ أي توكن من متصفحك (F12 → Application → Cookies/Local Storage) والصقه في أداة فك JWT المجانية — سترى محتواه كاملاً أمامك خلال ثانية.
النقطة الحرجة: فك التوكن ليس التحقق منه
هنا يسقط كثير من المطورين:
- الفك (Decoding): قراءة المحتوى — ممكن لأي أحد بأي أداة
- التحقق (Verification): إعادة حساب التوقيع بالمفتاح السري ومطابقته — لا يمكن إلا لمن يملك المفتاح (خادمك)
لهذا القاعدة الأمنية الأولى: لا تثق بأي claim داخل التوكن حتى تتحقق من توقيعه في خادمك. مهاجم يستطيع كتابة {"role": "admin"} في توكن مزيف — لكنه لن يستطيع توليد التوقيع الصحيح له. إن تخطى خادمك التحقق لأنك "قرأت الدور وأنت مطمئن"، فتحت الباب للاختراق.
الأخطاء الأمنية القاتلة في JWT
- قبول
alg: none: بعض المكتبات القديمة تقبل توكنات بلا توقيع إن قال الهيدر ذلك! ثبّت مكتباتك وارفض صراحة أي alg غير المتوقع - أسرار ضعيفة لـ HS256: مفتاح مثل
secret123يُكسر بالـ brute force في دقائق. استخدم 256-bit عشوائياً على الأقل — ولّده بمولد آمن مثل مولد كلمات المرور - توكنات بلا انتهاء: نسيان claim الـ
expيعني توكناً حياً للأبد — كارثة عند التسريب - بيانات حساسة في Payload: رقم هاتف، عنوان، رقم بطاقة؟ كلها مكشوفة بالكامل لأي من يسرق التوكن
- تخزين التوكن في localStorage: عرضة لهجمات XSS — الـ httpOnly cookies أكثر أماناً للتطبيقات الحساسة
أمثلة كود عملية
إنشاء وتوقيع توكن (Node.js)
const jwt = require('jsonwebtoken');
const token = jwt.sign(
{ user_id: 143, role: 'editor' }, // Payload
process.env.JWT_SECRET, // مفتاح 256-bit+
{ expiresIn: '15m', issuer: 'sp5-api' } // خيارات أمان
);
تحقق صحيح في middleware
try {
const payload = jwt.verify(token, process.env.JWT_SECRET, {
algorithms: ['HS256'], // ارفض كل شيء آخر — حتى لو طلب الهيدر غيرها
issuer: 'sp5-api'
});
req.user = payload;
} catch (err) {
return res.status(401).json({ error: 'invalid token' });
}
// الآن وبعد التحقق فقط — استخدم req.user.role بأمان
متى تستخدم Base64 فعلياً؟
- Data URIs: تضمين صور صغيرة مباشرة في CSS/HTML (
data:image/png;base64,...) - Basic Auth: رأس HTTP القديم لكنه حي (
Authorization: Basic base64(user:pass)) — فقط عبر HTTPS! - نقل binary في JSON: ملفات صغيرة داخل APIs
- JWT نفسه: كما رأينا
ومتى لا؟ لا تستخدمه أبداً كوسيلة "إخفاء" لكلمات سر أو مفاتيح API في كود الواجهة الأمامية — كل شيء يصل للمتصفح مكشوف، والمستخدم الواعي سيفكه عبر الأداة في ثوانٍ.
أسئلة شائعة
هل فك JWT الخاص بي في أداة أونلاين خطر؟ الفك مجرد قراءة نص مرمز — لا يتطلب مفتاحاً ولا يكشف التوقيع. الخطر الحقيقي الوحيد أن يكون التوكن نفسه نشطاً وسرقته الأداة (وهذا لا يحدث في أدوات client-side نظيفة). الأداة عندنا تعمل كلياً في متصفحك — يمكنك قطع الإنترنت بعدها بالتحميل وستعمل. ومع ذلك، العرف المهني: توكنات الإنتاج الحقيقية تُفحص في بيئة التطوير لديك.
Session أم JWT؟ الجلسات التقليدية أبسط وأسهل الإبطال (Revocation). JWT يتألق في: microservices، تطبيقات موبايل، APIs عامة، وأنظمة موزعة حيث تخزين الجلسات مكلف. الحل الهجين الشائع: Access Token قصير (15 دقيقة) + Refresh Token قابل للإبطال.
ما الفرق بين HS256 وRS256؟ HS256 متماثل (نفس المفتاح يوقع ويتحقق) — مناسب لتطبيق واحد. RS256 غير متماثل (خاص يوقع + عام يتحقق) — ضروري عندما يتحقق طرفان آخرون من توكناتك دون أن يستطيعوا تزويرها، كما في Google OAuth.
الخلاصة
احفظ ثلاث جمل وتجاوزت 80% من أخطاء المبتدئين: Base64 ترميز لا تشفير. Payload في JWT مكشوف للجميع. التحقق من التوقيع وحده هو الأمان. جرّب الآن أداة Base64 & JWT Decoder — تعمل كلياً في متصفحك، تفك الصيغتين العادية وURL، وتعرض لك التوكنات بشكل JSON منظم مع حالة الصلاحية.