فحص رمز من مزوّد المصادقة
Auth0 وFirebase وKeycloak وAWS Cognito كلّها تُعيد JWTs بعد تسجيل الدخول. الصق access_token لترى المطالبات التي يستقبلها تطبيقك فعلًا — ما هو معرّف المستخدم؟ ما النطاقات؟ متى ينتهي؟
فُكّ ترميز أي JSON Web Token لرؤية ترويسته وحمولته وتوقيعه — أو وقّع رمزًا جديدًا بـ HS256/384/512. يتحقّق من توقيعات HMAC محليًا. 100% داخل متصفحك.
فُكّ ترميز أي JSON Web Token لرؤية ترويسته وحمولته وتوقيعه — أو وقّع رمزًا جديدًا بـ HS256/384/512. يتحقّق من توقيعات HMAC محليًا. 100% داخل متصفحك.
لا. الأداة بأكملها هي JavaScript داخل هذه الصفحة. تلصق الرمز، يحدث فك الترميز في متصفحك، والبايتات لا تغادر التبويب أبدًا. افتح DevTools ← Network وراقب — لا تُرسَل أيّ طلبات أثناء فك الترميز أو التحقّق. هذا يجعل من الآمن لصق رموز عملاء حقيقية أو رموز إنتاج.
يُثبت أنّ الرمز وُقِّع بواسطة من يحمل السرّ (HMAC) أو المفتاح الخاصّ (RSA/ECDSA). لا يُشفّر الحمولة — فالترويسة والحمولة مجرّد JSON مُرمَّز بـ base64url، وأيّ شخص يملك الرمز يمكنه قراءتهما. التوقيع يمنع العبث فقط: إذا غيّرت بايتًا واحدًا في الحمولة، فلن يطابق التوقيع بعد ذلك.
كثيرًا ما يحمل JWT معرّف المستخدم وبريده الإلكتروني والنطاقات وأحيانًا مكافئ ملفّات تعريف ارتباط الجلسة — وهي تحديدًا البيانات التي يجب ألّا تلصقها في خادم غريب. فاكّ iKit يعمل كـ JavaScript مُحمَّل بالفعل في تبويب متصفحك. يمكن التحقّق من ذلك في DevTools ← Network: لا fetch، لا XHR، لا beacon أثناء فك الترميز أو التحقّق.
بالنسبة لرموز HS256/384/512، اكتب سرّ التوقيع للتحقّق من التوقيع محليًا. أمّا بالنسبة لـ RS256/ES256 (RSA/ECDSA) فاستخدم مكتبة على الخادم — فالتحقّق بالمفتاح العام يحتاج إلى ملف PEM لا نقبله هنا.
تحتاج HS256 إلى 32 بايت على الأقل (256 بت) لقوّة تشفير حقيقية. أيّ شيء يصلح للاختبار، لكن الإنتاج يجب أن يستخدم سرًّا عشوائيًا طويلًا.
أسرع طريقة لتنقيح JWT — بلا رفع، بلا تسجيل، بلا طرف ثالث بينك وبين رمزك.
الصق JWT لترى الترويسة والحمولة والتوقيع المفكوكة جنبًا إلى جنب. المطالبات القياسية (iss، sub، aud، exp، iat) تُعرض بطوابع زمنية مع وسوم.
بالنسبة لرموز HS256/384/512، اكتب السرّ للتحقّق من التوقيع باستخدام Web Crypto في المتصفح. السرّ لا يغادر تبويبك أبدًا.
بدّل إلى وضع الترميز، عدّل الترويسة والحمولة بصيغة JSON، اختر الخوارزمية، اكتب سرًّا، واحصل على رمز موقَّع فورًا.
حمولات JWT تحتوي على معرّفات مستخدمين وبُرُد إلكترونية وأحيانًا نطاقات صلاحيات — لا تلصقها أبدًا في أداة على الخادم. فاكّ iKit يعمل كـ JavaScript داخل متصفحك. يمكن التحقّق من ذلك في DevTools ← Network.
المطالبات القياسية مثل exp وnbf وiat تُبرَز بتواريخ مقروءة وشارة واضحة EXPIRED / صالح لتعرف بنظرة واحدة هل لا يزال الرمز صالحًا.
مبني على Web Crypto الأصلية في المتصفح ومحلّل JSON — نفس الخوارزميات المستخدمة في OpenSSL وlibjwt وjose. السلوك يطابق كلّ مكتبة JWT حديثة.
JWT هو ثلاثة أجزاء JSON مُرمَّزة بـ base64url مفصولة بنقاط — هذا كلّ شيء.
يبدو JWT مثل aaa.bbb.ccc. نفصل عند النقطتين الحرفيّتين، فنحصل على الترويسة والحمولة والتوقيع المُرمَّزة. إذا لم نحصل على ثلاثة أجزاء بالضبط، فالرمز مُشوَّه.
الترويسة والحمولة هما JSON بترميز UTF-8 مُرمَّز بـ base64url. Base64URL = Base64 مع -/_ بدلًا من +//= وبدون حشو. ننفّذ atob بعد إعادة استبدال الأحرف، ثم JSON.parse على النصّ الناتج.
الترويسة تخبرنا بالخوارزمية (alg: HS256، RS256، إلخ) والنوع. الحمولة تحتوي على المطالبات — القياسية منها (iss، sub، aud، exp، iat، nbf، jti) إضافة إلى أيّ حقول مخصّصة. نعرض كلًّا منها في قسم بوسم.
بالنسبة لـ HS256/384/512، نُعيد حساب HMAC لـ header.payload باستخدام السرّ الذي كتبته ونقارنه بالتوقيع في الجزء الثالث. كما في HMAC(SHA-256, secret, signing_input) مُرمَّزًا بـ base64url. مطابقة = توقيع صالح.
مواقف حقيقية ستحتاج فيها إلى فاكّ ترميز JWT.
Auth0 وFirebase وKeycloak وAWS Cognito كلّها تُعيد JWTs بعد تسجيل الدخول. الصق access_token لترى المطالبات التي يستقبلها تطبيقك فعلًا — ما هو معرّف المستخدم؟ ما النطاقات؟ متى ينتهي؟
الـ API يرفض طلبك؟ فُكّ ترميز الرمز للتحقّق: هل هو منتهٍ (exp في الماضي)؟ هل مطالبة الجمهور (aud) مطابقة لما يتوقّعه الـ API؟ هل المُصدِر (iss) هو المستأجر الصحيح؟
Stripe وGitHub Apps وSlack تُرسل حمولات webhook موقَّعة كـ JWTs. بعد استقبال أحدها، الصقه في وضع فك الترميز مع السرّ المشترك للتأكّد من أنّ الطلب جاء فعلًا منهم.
تحتاج JWT موقَّع جديد لاختبار تكامل؟ بدّل إلى وضع الترميز، عدّل الحمولة (معرّف مستخدم مخصّص، مدّة انتهاء مخصّصة)، اختر HS256 + سرّ الاختبار، احصل على رمز في أجزاء من الثانية. بلا جولة إلى الخادم.
كثيرًا ما يحمل JWT معرّف المستخدم وبريده الإلكتروني والنطاقات وأحيانًا مكافئ ملفّات تعريف ارتباط الجلسة — وهي تحديدًا البيانات التي يجب ألّا تلصقها في خادم غريب. فاكّ iKit يعمل كـ JavaScript مُحمَّل بالفعل في تبويب متصفحك. يمكن التحقّق من ذلك في DevTools ← Network: لا fetch، لا XHR، لا beacon أثناء فك الترميز أو التحقّق.
دروس تفصيلية ومقارنات بين الأدوات من مدونة iKit.
JWT segments are base64url-encoded JSON — understand the encoding before you debug a token.
JWT signatures are HMAC-SHA hashes — the same family of cryptographic hashes used to verify file integrity.
لا. الأداة بأكملها هي JavaScript داخل هذه الصفحة. تلصق الرمز، يحدث فك الترميز في متصفحك، والبايتات لا تغادر التبويب أبدًا. افتح DevTools ← Network وراقب — لا تُرسَل أيّ طلبات أثناء فك الترميز أو التحقّق. هذا يجعل من الآمن لصق رموز عملاء حقيقية أو رموز إنتاج.
يُثبت أنّ الرمز وُقِّع بواسطة من يحمل السرّ (HMAC) أو المفتاح الخاصّ (RSA/ECDSA). لا يُشفّر الحمولة — فالترويسة والحمولة مجرّد JSON مُرمَّز بـ base64url، وأيّ شخص يملك الرمز يمكنه قراءتهما. التوقيع يمنع العبث فقط: إذا غيّرت بايتًا واحدًا في الحمولة، فلن يطابق التوقيع بعد ذلك.
ثلاثة أسباب شائعة: (1) سرّ خاطئ — أسرار JWT حسّاسة لحالة الأحرف وأيّ اختلاف في المسافات يكسر التحقّق. (2) عدم تطابق الخوارزمية — تقول الترويسة HS256 لكن السرّ استُخدم أصلًا مع HS512. (3) عُدِّل الرمز بعد التوقيع — حتى بايت واحد يكسر التوقيع. تحقّق من أنّ header.alg يطابق ما تتوقّعه.
iKit يدعم حاليًا تحقّق HMAC فقط (HS256/384/512). RS256 وES256 يستخدمان تشفير المفتاح العام — التحقّق يحتاج إلى المفتاح العام للمُصدِر بصيغة PEM، وهي واجهة أكثر تعقيدًا. حاليًا، يعمل فك الترميز (تظهر أجزاء header/payload/signature بشكل صحيح)، لكن زرّ التحقّق سيخبرك بأنّه غير مدعوم. تحقّق RSA/ECDSA مخطّط له.
نفس الفكرة، إعدادات افتراضية مختلفة. فاكّ iKit يعمل بالكامل داخل متصفحك (jwt.io يفعل ذلك أيضًا، لكن شيفرة iKit مفتوحة عبر view-source ولا توجد متعقّبات طرف ثالث في نطاقنا). نضيف شارة واضحة EXPIRED / صالح لمطالبة exp، وملاحظات منظَّمة للمطالبات (iat / nbf / iss / sub / aud / jti كصفوف مقروءة)، وزرّ نسخ كلّ المفكوك يمنحك المخرَج المنظَّم الكامل للصقه في تقرير علّة.