طريقة الاستخدام
- الصق الرمز المميز كاملًا: ثلاثة أجزاء بترميز Base64URL تفصل بينها نقاط.
- اقرأ الترويسة والحمولة بعد فك ترميزهما. تُعرض المطالبات exp وiat وnbf في صورة تواريخ، مع تحذير إذا كان الرمز منتهي الصلاحية أو لم يسرِ بعد.
- للتحقق من التوقيع، أدخل في حقل «المفتاح السري» المفتاح المشترك لخوارزميات HS256 أو HS384 أو HS512، أو الصق المفتاح العام بصيغة PEM في حقل «المفتاح العام (PEM، SPKI)» لخوارزميات RS أو PS أو ES.
- تأكد من أن مطالبات الجهة المُصدِرة والجمهور والموضوع تطابق ما يتوقعه تطبيقك.
بنية JWT
يتكون رمز JSON Web Token (المعرّف في RFC 7519) من ثلاثة أجزاء تفصل بينها نقاط: header.payload.signature. الترويسة والحمولة كائنا JSON مرمّزان بترميز Base64URL بلا حشو، ولهذا تبدأ الرموز دائمًا تقريبًا بـ eyJ، وهو الشكل المرمّز لعلامة الافتتاح {". ويُحسب التوقيع على الجزأين الأولين تمامًا كما يظهران في الرمز.
- الترويسة (Header): خوارزمية التوقيع في
alg، وعادةً"typ": "JWT"، وغالبًاkidالذي يحدد المفتاح المستخدم. - الحمولة (Payload): المطالبات، مثل هوية المستخدم والجهة التي أصدرت الرمز وموعد انتهاء صلاحيته.
- التوقيع (Signature): توقيع HMAC أو RSA أو ECDSA يثبت أن الترويسة والحمولة لم تُعدَّلا.
أما الرمز المؤلف من خمسة أجزاء فهو JWE مشفّر، ولا يمكن قراءة محتواه دون مفتاح فك التشفير.
المطالبات المسجّلة
| المطالبة | الاسم | المعنى |
|---|---|---|
iss | الجهة المُصدِرة (Issuer) | الجهة التي أنشأت الرمز ووقّعته |
sub | الموضوع (Subject) | الجهة التي يخصها الرمز، وعادةً معرّف مستخدم |
aud | الجمهور (Audience) | الخدمة المقصودة بالرمز |
exp | وقت انتهاء الصلاحية (Expiration time) | يجب رفض الرمز بعد هذه اللحظة |
nbf | لا يسري قبل (Not before) | يجب رفض الرمز قبل هذه اللحظة |
iat | وقت الإصدار (Issued at) | وقت إنشاء الرمز |
jti | معرّف JWT (JWT ID) | معرّف فريد يُستخدم لكشف محاولات إعادة الإرسال |
الأوقات قيم من نوع NumericDate: عدد الثواني منذ 1 يناير 1970 بالتوقيت العالمي المنسق (UTC)، لا عدد المللي ثانية. تعرضها الأداة في صورة تواريخ مقروءة وتقارنها بساعة جهازك.
فك الترميز ليس تحققًا
يستطيع أي شخص فك ترميز JWT، لأن الحمولة مرمّزة فقط وليست مشفّرة؛ لذا لا تضع فيها كلمات مرور أو أي أسرار أخرى أبدًا. لا تأتي الثقة إلا من التحقق من التوقيع بالمفتاح الصحيح، وعلى الخادم الذي يقبل الرموز أيضًا أن:
- يسمح بالخوارزمية التي يتوقعها فقط، ويرفض
"alg": "none"التي تدل على رمز غير موقّع؛ - لا يدع ترويسة الرمز تختار بين HMAC وRSA أبدًا، وإلا فبإمكان المهاجم توقيع رمز مزوّر باستخدام مفتاحك العام بوصفه مفتاحًا سريًا لـ HMAC؛
- يتحقق من
expوnbfوissوaudفي كل طلب.
يستخدم التحقق الاختياري في هذه الصفحة واجهة Web Crypto API المدمجة في متصفحك. يجري فك الترميز والتحقق على جهازك ولا يُرفع أي شيء. وكقاعدة عامة، لا تلصق مفاتيح التوقيع المستخدمة في بيئة الإنتاج أو الرموز الفعّالة في مواقع لا تثق بها.
الأسئلة الشائعة
هل لصق JWT في هذه الأداة آمن؟
يُفك ترميز الرمز ويُتحقق منه بواسطة JavaScript في متصفحك، ولا يُرسل إلى أي خادم أبدًا. لكن تذكّر أن الرمز الذي لم تنتهِ صلاحيته يعمل ككلمة مرور لمن يحمله، لذا يُفضَّل استخدام رموز تجريبية أو منتهية الصلاحية عند مشاركة لقطات الشاشة أو السجلات.
هل يمكنني فك ترميز JWT دون المفتاح السري؟
نعم. الترويسة والحمولة مجرد JSON مرمّز بـ Base64URL، لذا يمكن قراءتهما دون أي مفتاح. ولا تحتاج إلى المفتاح السري أو المفتاح العام إلا للتحقق من التوقيع.
لماذا تشير الأداة إلى أن صلاحية الرمز قد انتهت؟
exp تسبق الوقت الحالي على جهازك. إذا كان يُفترض أن يظل الرمز صالحًا، فتحقق من ساعة نظامك ومن مدة صلاحية الرمز التي ضبطتها الجهة المُصدِرة.ما خوارزميات التوقيع التي يمكن التحقق منها؟
HS256 وHS384 وHS512 باستخدام مفتاح سري مشترك، وRS256 وRS384 وRS512 وPS256 وPS384 وPS512 وES256 وES384 وES512 باستخدام مفتاح عام بصيغة PEM.
ما معنى "alg": "none"؟
يدل على JWT غير مؤمَّن بتوقيع فارغ، وهو معرّف في RFC 7518. يستطيع أي شخص إنشاء رمز كهذا أو تعديله، لذا يجب على الخادم الذي يتوقع رموزًا موقّعة أن يرفضه دائمًا.