ما هو JWT؟ شرح رموز JSON Web Token

رمز JSON Web Token (اختصاراً JWT) سلسلة نصية مضغوطة تحمل مجموعة من المطالبات (claims) — عبارات مثل «هذا هو المستخدم 42، بدور مدير، صالح حتى الساعة 15:00» — إلى جانب توقيع تشفيري يتيح للمستقبل التأكد من أن المطالبات صادرة عن جهة يثق بها ولم تُعدَّل. رموز JWT هي الصيغة القياسية لمصادقة واجهات API ورموز وصول OAuth 2.0 ورموز هوية OpenID Connect.

يشرح هذا الدليل ما بداخل الرمز، ومعنى المطالبات القياسية، وكيفية فك ترميزه والتحقق منه، وقواعد الأمان التي تفصل بين تطبيق آمن واختراق.

الأجزاء الثلاثة لرمز JWT

يتكون JWT من ثلاثة مقاطع مرمّزة بـ Base64URL تفصل بينها نقاط: header.payload.signature. وBase64URL هو Base64 بأحرف آمنة لعناوين URL ودون حشو، حتى يمكن للرمز الانتقال في الترويسات وسلاسل الاستعلام وملفات تعريف الارتباط.

  • الترويسة (Header) — JSON يصف نوع الرمز وخوارزمية التوقيع، مثل {"alg": "HS256", "typ": "JWT"}. وقد تحمل أيضاً kid (معرّف المفتاح) الذي يخبر المتحقق بالمفتاح الواجب استخدامه.
  • الحمولة (Payload) — المطالبات ككائن JSON. يمكن وضع أي شيء هنا، لكنه مرمّز فقط لا مشفّر: كل من يملك الرمز يستطيع قراءته.
  • التوقيع (Signature) — يُحسب على الترويسة والحمولة المرمّزتين بالخوارزمية المذكورة في الترويسة. تستخدم HS256 سراً مشتركاً (HMAC)؛ أما RS256 وES256 فتستخدمان مفتاحاً خاصاً للتوقيع ومفتاحاً عاماً للتحقق.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiI0MiIsIm5hbWUiOiJMYXlsYSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTc1NjcwMDAwMCwiZXhwIjoxNzU2NzAzNjAwfQ
.4l3Y2cYpXqZ0cVZ5m4Q8n1fGx0y8s3oT0kq4rV7cWvA

header  → {"alg":"HS256","typ":"JWT"}
payload → {"sub":"42","name":"Layla","role":"admin","iat":1756700000,"exp":1756703600}

جرّبها: مفكّك ترميز JWT

المطالبات القياسية ومعانيها

  • iss (المُصدر) — من أنشأ الرمز، وعادةً عنوان خادم المصادقة.
  • sub (الموضوع) — من يتحدث عنه الرمز، وغالباً معرّف المستخدم.
  • aud (الجمهور) — الخدمة التي يُقصد بها الرمز. يجب على المتحقق رفض الرموز الموجهة لجمهور آخر.
  • exp (انتهاء الصلاحية) — طابع Unix زمني يصبح الرمز بعده غير صالح. الأعمار القصيرة (دقائق لرموز الوصول) تحدّ من ضرر التسريب.
  • nbf (ليس قبل) وiat (وقت الإصدار) — طوابع زمنية تحدد متى أصبح الرمز صالحاً ومتى أُنشئ.
  • jti (معرّف JWT) — معرّف فريد يُستخدم لاكتشاف إعادة الاستخدام أو لإبطال رمز بعينه.
  • المطالبات المخصصة — الأدوار والصلاحيات ومعرّف المستأجر والبريد الإلكتروني. أبقها صغيرة: يُرسل الرمز مع كل طلب.

جرّبها: محلّل مطالبات JWT جرّبها: فاحص انتهاء صلاحية JWT

فك الترميز ليس تحققاً

فك ترميز JWT يعني فك ترميز Base64URL للترويسة والحمولة لقراءتهما. يستطيع أي شخص فعل ذلك دون أي مفتاح — وهذا بالضبط سبب وجوب عدم الوثوق بحمولة مفكوكة الترميز بمفردها. أما التحقق فيعني إعادة حساب التوقيع بالمفتاح والخوارزمية الصحيحين والتأكد من تطابقه، ثم فحص exp وnbf وiss وaud.

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

جرّبها: مفكّك ترميز JWT جرّبها: محلّل ترويسة JWT

HS256 مقابل RS256 مقابل ES256

  • HS256 (HMAC مع SHA-256) — سر مشترك واحد يوقّع ويتحقق. بسيط وسريع ومناسب عندما تصدر خدمة واحدة الرموز وتستهلكها. كل طرف يستطيع التحقق يستطيع أيضاً التزوير.
  • RS256 (توقيع RSA) — مفتاح خاص يوقّع ومفتاح عام يتحقق. تستطيع أي خدمة التحقق بالمفتاح العام المنشور (غالباً عبر نقطة نهاية JWKS) دون القدرة على إنشاء رموز. وهو الافتراضي لدى مزوّدي OAuth.
  • ES256 (ECDSA مع P-256) — نموذج غير متماثل كـ RS256 بمفاتيح وتوقيعات أصغر بكثير.
  • none — خوارزمية تعني «بلا توقيع». يجب على المتحققين رفضها؛ فقبول alg=none إحدى الثغرات الكلاسيكية في JWT.

جرّبها: مولّد JWT جرّبها: مولّد HMAC

قواعد أمان JWT

  • تحقق من التوقيع وثبّت الخوارزمية في الخادم. لا تدع ترويسة الرمز نفسها تقرر الخوارزمية المستخدمة.
  • افحص exp دائماً، وقارن aud وiss بقيمك الخاصة.
  • لا تضع أسراراً أو كلمات مرور أو بيانات شخصية حساسة في الحمولة — فهي مقروءة لكل من يحمل الرمز. استخدم JWE إن احتجت إلى التشفير.
  • أبقِ رموز الوصول قصيرة العمر واستخدم رمز تحديث للحصول على رموز جديدة.
  • خزّن الرموز بحذر في المتصفحات: ملف تعريف ارتباط HttpOnly وSecure وSameSite أكثر أماناً من localStorage الذي يستطيع أي سكربت محقون قراءته.
  • استخدم سراً قوياً لـ HS256 — 256 بت من العشوائية على الأقل، ولا تستخدم كلمة مرور أبداً.
  • خطط للإبطال: يبقى JWT صالحاً حتى انتهاء صلاحيته، لذا يحتاج تسجيل الخروج أو الحساب المخترق إلى قائمة رفض (jti) أو أعمار قصيرة.

جرّبها: مولّد الأسرار العشوائية جرّبها: مفكّك ترميز رموز OAuth

JWT في OAuth 2.0 وOpenID Connect

غالباً ما تكون رموز وصول OAuth 2.0 من نوع JWT، وإن كانت المواصفة لا تشترط ذلك؛ أما رموز هوية OpenID Connect فهي كذلك دائماً. يصف رمز الهوية المستخدم المصادَق عليه (sub والبريد والاسم) لتطبيق العميل؛ بينما يمنح رمز الوصول العميل إذن استدعاء واجهة API (النطاق وaud). يُتحقق منهما بالطريقة نفسها، لكن يجب ألا يُرسل رمز الهوية إلى واجهة API كما لو كان رمز وصول.

جرّبها: مفكّك ترميز رموز OAuth

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

هل JWT مشفّر؟

لا — رمز JWT الموقّع القياسي (JWS) مرمّز بـ Base64URL فقط. حمولته مقروءة لكل من يملك الرمز. توجد رموز مشفّرة (JWE) لكنها أقل شيوعاً بكثير.

هل يمكن فك ترميز JWT دون السر؟

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

كيف أتحقق من انتهاء صلاحية JWT؟

فكّ ترميزه وقارن مطالبة exp (طابع Unix زمني بالثواني) بالوقت الحالي. تفعل مكتبات التحقق ذلك تلقائياً؛ وتعرض أداة فك الترميز أونلاين موعد الانتهاء كتاريخ مقروء.

ما الفرق بين JWT وملف تعريف ارتباط الجلسة؟

ملف تعريف ارتباط الجلسة معرّف معتم يبحث عنه الخادم في مخزنه؛ أما JWT فيحمل بيانات الجلسة نفسها موقّعة، فلا يحتاج الخادم إلى بحث. تتوسع رموز JWT عبر الخدمات بسهولة أكبر؛ بينما الجلسات أسهل في الإبطال.

أين أخزّن JWT في تطبيق ويب؟

يُفضَّل ملف تعريف ارتباط HttpOnly وSecure مع SameSite، حتى لا يستطيع JavaScript في الصفحة قراءته. localStorage مريح لكنه يعرّض الرمز لأي ثغرة برمجة عبر المواقع.

هل من الآمن لصق JWT في أداة فك ترميز أونلاين؟

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

الأدوات المذكورة في هذا الدليل

فكّ ترميز ترويسة JWT وحمولته، وفحص المطالبات (claims) والتحقق من انتهاء الصلاحية — بالكامل داخل متصفحك.

الأمان فتح الأداة

إنشاء رموز JWT موقَّعة (HS256 / HS384 / HS512) من مطالبات مخصّصة لأغراض الاختبار.

الأمان فتح الأداة

أدلة أخرى

أدلة أخرى →
JSON والبيانات

ما هو JSON؟

شرح JSON بلغة مبسّطة: ما هو، وأنواع القيم الست، وقواعد الصياغة التي يخطئ فيها الكثيرون، وكيفية تنسيقه والتحقق منه، ومقارنته بـ XML وYAML.

وقت القراءة 4 دقائق
اختبار واجهات API

ما هو اختبار API؟ وكيف تختبر REST API

شرح اختبار API: ما هو، وما الذي تفحصه في كل طلب واستجابة، وطريقة خطوة بخطوة لاختبار REST API، والأخطاء الشائعة، وأدوات مجانية من متصفحك.

وقت القراءة 5 دقائق
تصميم الاختبارات

كيف تكتب حالات الاختبار (Test Cases)

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

وقت القراءة 4 دقائق
الترميز

ما هو Base64؟ شرح الترميز

شرح Base64: ما هو وما ليس هو، وكيف يعمل الترميز، ولماذا يكبر الناتج بالثلث، والفرق بين Base64 وBase64URL، وحشو =، وكيفية الترميز وفك الترميز.

وقت القراءة 4 دقائق
أدوات مساعدة

ما هو UUID؟ الفرق بين v4 وv7 وبين UUID وGUID وULID

شرح UUID: صيغة الـ 128 بت، والفرق بين v4 وv7، ولماذا v7 أفضل لمفاتيح قواعد البيانات، ومقارنة UUID بـ GUID وULID، واحتمال التصادم، والتوليد والتحقق.

وقت القراءة 4 دقائق
الويب

شرح رموز حالة HTTP

شرح كل فئة من رموز حالة HTTP مع الرموز التي تقابلها فعلاً — 200 و301 و400 و401 و403 و404 و422 و429 و500 و502 و503 و504 — وسبب كل منها وأيها تعيده.

وقت القراءة 4 دقائق