ما هو JSON Web Token؟
JSON Web Token (JWT) هو غلاف مدمج وآمن للاستخدام في عناوين URL لحمولة صغيرة من المطالبات. وهو صيغة الاعتماد القياسية لجلسات الويب عديمة الحالة، ورموز الهوية في OAuth/OIDC، ومصادقة واجهات برمجة التطبيقات بين الأنظمة، وروابط الدخول المُوقَّعة. يتألف JWT دوماً من ثلاثة مقاطع base64url تربطها نقاط: header.payload.signature. الترويسة والحمولة بصيغة JSON؛ أما التوقيع فهو رمز مصادقة رسالة (MAC) ثنائي أو توقيع رقمي يغطي المقطعين الأولين.
كيف تعمل JWTs؟
حين تفُك هذه الأداة ترميز رمز، فإنها تتبع المسار الثلاثي ذاته الذي تتبعه كل مكتبة JWT:
- تقسيم الرمز عند النقاط إلى ثلاثة مقاطع غير فارغة بالضبط. أي شكل آخر يُعدّ مُشوَّهاً.
- فك ترميز المقطعين 0 و1 بـ base64url، ثم تطبيق
JSON.parseعلى كلٍّ منهما. تحمل الترويسة الخوارزمية (alg) ونوع الرمز (typ). وتحمل الحمولة المطالبات (sub،exp،iat، ومفاتيح مخصَّصة). - إذا قُدِّم سرّ، يُعاد حساب رمز MAC على
<segment0>.<segment1>باستخدام الخوارزمية الواردة في الترويسة. ثم تُقارن البايتات الناتجة بالمقطع الثالث. - إظهار نتيجة التحقق إلى جانب المطالبات المفكوكة، بما فيها مؤشِّر انتهاء الصلاحية المقروء حُسِب من المطالبة
exp.
لماذا نفك ترميز JWTs في المتصفح؟
إن لصق رمز JWT حقيقي وقيد الاستخدام في مصحِّح بعيد يُسرِّب الاعتماد إلى سجلات تلك الخدمة، وحزمة مراقبتها، وأي شريك تُرسَل إليه البيانات. حتى لو ادَّعى موقع الطرف الثالث أنه لا يُسجِّل الرموز، فليس لديك وسيلة للتحقق من ذلك. صُمِّمت هذه الأداة كي لا تضطر أبداً إلى هذا التنازل:
- صفر شبكة: لا يحوي وقت التشغيل أي استدعاءات لـ
fetchأوXMLHttpRequestأوsendBeacon. افتح أدوات المطوّر أثناء فك الترميز والتحقق — ستبقى لوحة الشبكة صامتة. - Web Crypto الأصلية: يستخدم التحقق من HMAC الدالتين
crypto.subtle.importKeyوcrypto.subtle.sign، وهي البدائيات ذاتها التي يستدعيها وقت تشغيلك. - نشر ثابت: كل صفحة هي ملف HTML ثابت واحد دون أي نقطة نهاية على الخادم يمكن اختراقها. لا يوجد رمز يمكن تسريبه لأنه لا يوجد خادم يُسرَّب إليه.
ماذا تتحقق هذه الأداة، وما الذي لا تتحقق منه؟
يتحقق الإصدار الأول من هذه الأداة من توقيعات عائلة HMAC-SHA فقط. تحديداً:
- مدعوم: HS256، HS384، HS512. قدِّم السرّ المشترك وستُعيد الأداة حساب رمز MAC ومقارنته.
- غير مدعوم بعد: RS256/384/512 (RSA)، ES256/384/512 (ECDSA)، EdDSA، وPS256/384/512 (RSA-PSS). تتطلب هذه الخوارزميات مفتاحاً عاماً بصيغة PEM أو JWK، وقد أُجِّلت عمداً إلى إصدار لاحق.
- مرفوض:
alg: "none". تفُك الأداة ترميز الرمز لكنها تُعلِّمه صراحةً بوصفه غير آمن — فلا يجري أي تحقق من التوقيع، وأي نظام إنتاجي يقبل مثل هذا الرمز يحوي ثغرة أمنية خطيرة.
كيف يبدو مثال على فك ترميز JWT؟
ألصق الرمز المرجعي القانوني من RFC 7519 في حقل الإدخال أعلاه:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
تتفكك الترويسة إلى {"alg":"HS256","typ":"JWT"} والحمولة إلى {"sub":"1234567890","name":"John Doe","iat":1516239022}. أدخل your-256-bit-secret في لوحة التحقق فيُعيد فحص التوقيع نتيجة صالحة. غيِّر حرفاً واحداً من السرّ فيُعيد نتيجة غير صالحة. ولا شيء من ذلك يغادر متصفحك.
هذا هو مفكك JWT الذي كنا نتمنى وجوده حين احتجنا إلى تصحيح رمز في الإنتاج: محترِم للخصوصية، وسريع، ومبني على البدائيات ذاتها التي يستخدمها وقت التشغيل.