مُفكِّك / مُتحقِّق JWT

فُكّ ترميز header وpayload الخاصين بـ JWT، وتحقّق من توقيعه، واطّلع على موعد انتهائه.

الرمز

ما هو JSON Web Token

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

يتكوّن JWT من ثلاثة أجزاء مرمَّزة بـ Base64URL ومفصولة بنقاط: header.payload.signature. تقسم هذه الأداة تلك الأجزاء وتفكّ ترميزها نيابةً عنك، وتعرض المطالبات بصورة مقروءة، وإذا قدّمت مفتاح التوقيع تحقّقت من أن التوقيع أصيل.

الأجزاء الثلاثة

  • ‏Header: يصف كيفية توقيع الرمز، وأهم ذلك الخوارزمية («alg»، مثل HS256 أو RS256) ونوع الرمز.
  • ‏Payload: المطالبات نفسها — كائن JSON بحقول مثل sub (الموضوع/المستخدم) وexp (الانتهاء) وiat (وقت الإصدار) وأي بيانات مخصّصة أضافها المُصدِر.
  • ‏Signature: قيمة تشفيرية تُحسب على الـ header والـ payload بسرّ أو مفتاح خاص. وهي ما يجعل JWT جديرًا بالثقة: غيّر حرفًا واحدًا في الـ payload ولن يعود التوقيع مطابقًا.

والأهم: الـ header والـ payload مرمَّزان فقط، وليسا مشفَّرين. فأي شخص يملك الرمز يستطيع قراءتهما. التوقيع لا يخفي المحتوى — بل يثبت أنه لم يُعبث به. لا تضع أبدًا كلمات مرور أو أسرارًا في payload الخاص بـ JWT.

التحقق من التوقيع

فكّ ترميز JWT يخبرك بما يدّعيه؛ أما التحقق فيخبرك إن كان ينبغي تصديق تلك الادعاءات. يعيد التحقق حساب التوقيع من الـ header والـ payload باستخدام مفتاح ويتأكّد من تطابقه. وهناك عائلتان من الخوارزميات تستخدمان نوعين مختلفين من المفاتيح:

  • ‏HMAC ‏(HS256 وHS384 وHS512): مخطط متماثل. السرّ المشترك نفسه يوقّع ويتحقّق. قدّم ذلك السرّ للتحقق.
  • ‏RSA وECDSA ‏(RS256 وPS256 وES256 وما شابهها): مخططات غير متماثلة. مفتاح خاص يوقّع ومفتاح عام يتحقّق. قدّم المفتاح العام بصيغة PEM للتحقق — ولن تحتاج أبدًا إلى المفتاح الخاص لمجرد فحص رمز.

تكتشف هذه الأداة الخوارزمية من الـ header تلقائيًا وتتحقّق بالكامل في متصفحك عبر Web Crypto API، فلا يُرفَع الرمز ولا المفتاح أبدًا.

قراءة المطالبات القياسية

عدد قليل من أسماء المطالبات موحَّد قياسيًا (تُسمّى «registered claims»). تصنّفها الأداة وتحوّل المعتمِدة على الوقت من طوابع زمنية Unix خام إلى توقيتك المحلي، مع حالة بلغة واضحة لترى بنظرة واحدة ما إذا كان الرمز نشطًا أو منتهيًا أو غير صالح بعد:

  • ‏exp — وقت الانتهاء: بعد هذه اللحظة ينبغي رفض الرمز.
  • ‏nbf — not before: الرمز غير صالح حتى هذه اللحظة.
  • ‏iat — issued at: متى أُنشئ الرمز.
  • ‏iss — issuer: مَن أنشأ الرمز.
  • ‏sub — subject: عمّن أو عمّ يتحدث الرمز (غالبًا معرّف مستخدم).
  • ‏aud — audience: لمن يُقصد الرمز.
  • ‏jti — معرّف فريد للرمز.

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

هل يُرسَل الرمز أو المفتاح الخاص بي إلى أي مكان؟
لا. يجري فكّ الترميز والتحقق من التوقيع بالكامل في متصفحك عبر Web Crypto API. لا يغادر الرمز ولا السرّ ولا المفتاح العام جهازك أبدًا، لذا من الآمن فحص رموز بيئة الإنتاج.
ما خوارزميات التوقيع التي يمكنه التحقق منها؟
‏HMAC ‏(HS256 وHS384 وHS512) بسرّ مشترك، وRSA (بنسختَي RS وPS) وECDSA ‏(ES256 وES384) بمفتاح عام بصيغة PEM. وتُكتشف الخوارزمية تلقائيًا من header الرمز.
هل JWT مشفَّر؟
لا. رمز JWT الموقَّع القياسي مرمَّز فقط وليس مشفَّرًا — فأي شخص يستطيع قراءة الـ header والـ payload. التوقيع يثبت أن الرمز لم يُغيَّر، لكنه لا يخفي المحتوى، لذا لا تخزّن أسرارًا في الـ payload أبدًا.
هل أحتاج المفتاح الخاص للتحقق من رمز RS256؟
لا. تتحقّق الخوارزميات غير المتماثلة بالمفتاح العام. تحتاج المفتاح الخاص فقط لإنشاء (توقيع) رمز، ولا تحتاجه أبدًا لفحصه.
لماذا يظهر رمزي كمنتهٍ؟
المطالبة exp تقع في الماضي بالنسبة لساعة جهازك. تحوّل الأداة exp وnbf وiat إلى توقيتك المحلي وتعرض حالة لتؤكّد نافذة صلاحية الرمز بنظرة واحدة.
ما الفرق بين HS256 وRS256؟
‏HS256 متماثل: سرّ مشترك واحد يوقّع ويتحقّق، وهو الأبسط عندما يقوم الطرف نفسه بكليهما. أما RS256 فغير متماثل: مفتاح خاص يوقّع ومفتاح عام يتحقّق، ما يتيح لأطراف كثيرة التحقق من الرموز دون القدرة على تزويرها.
هل يمكنني تعديل الـ payload وإعادة توقيع الرمز؟
هذه الأداة للقراءة فقط: تفكّ الترميز وتتحقّق، لكنها لا تُنشئ الرموز ولا تعيد توقيعها. وهذا يبقيها مركّزة ويتجنّب التعامل مع مفاتيح التوقيع الخاصة.