JWT Decoder

مُرمِّز / فاكّ ترميز JWT

فُكّ ترميز أي JSON Web Token لرؤية ترويسته وحمولته وتوقيعه — أو وقّع رمزًا جديدًا بـ HS256/384/512. يتحقّق من توقيعات HMAC محليًا. 100% داخل متصفحك.

مُرمِّز / فاكّ ترميز JWT — TL;DR

فُكّ ترميز أي JSON Web Token لرؤية ترويسته وحمولته وتوقيعه — أو وقّع رمزًا جديدًا بـ HS256/384/512. يتحقّق من توقيعات HMAC محليًا. 100% داخل متصفحك.

لا. الأداة بأكملها هي JavaScript داخل هذه الصفحة. تلصق الرمز، يحدث فك الترميز في متصفحك، والبايتات لا تغادر التبويب أبدًا. افتح DevTools ← Network وراقب — لا تُرسَل أيّ طلبات أثناء فك الترميز أو التحقّق. هذا يجعل من الآمن لصق رموز عملاء حقيقية أو رموز إنتاج.

يُثبت أنّ الرمز وُقِّع بواسطة من يحمل السرّ (HMAC) أو المفتاح الخاصّ (RSA/ECDSA). لا يُشفّر الحمولة — فالترويسة والحمولة مجرّد JSON مُرمَّز بـ base64url، وأيّ شخص يملك الرمز يمكنه قراءتهما. التوقيع يمنع العبث فقط: إذا غيّرت بايتًا واحدًا في الحمولة، فلن يطابق التوقيع بعد ذلك.

كثيرًا ما يحمل JWT معرّف المستخدم وبريده الإلكتروني والنطاقات وأحيانًا مكافئ ملفّات تعريف ارتباط الجلسة — وهي تحديدًا البيانات التي يجب ألّا تلصقها في خادم غريب. فاكّ iKit يعمل كـ JavaScript مُحمَّل بالفعل في تبويب متصفحك. يمكن التحقّق من ذلك في DevTools ← Network: لا fetch، لا XHR، لا beacon أثناء فك الترميز أو التحقّق.

الترويسة

الحمولة

التوقيع

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


            

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

بالنسبة لرموز HS256/384/512، اكتب سرّ التوقيع للتحقّق من التوقيع محليًا. أمّا بالنسبة لـ RS256/ES256 (RSA/ECDSA) فاستخدم مكتبة على الخادم — فالتحقّق بالمفتاح العام يحتاج إلى ملف PEM لا نقبله هنا.

لماذا فاكّ ترميز JWT من iKit

أسرع طريقة لتنقيح JWT — بلا رفع، بلا تسجيل، بلا طرف ثالث بينك وبين رمزك.

ثلاث لوحات، لصقة واحدة

الصق JWT لترى الترويسة والحمولة والتوقيع المفكوكة جنبًا إلى جنب. المطالبات القياسية (iss، sub، aud، exp، iat) تُعرض بطوابع زمنية مع وسوم.

تحقّق HMAC محلّي

بالنسبة لرموز HS256/384/512، اكتب السرّ للتحقّق من التوقيع باستخدام Web Crypto في المتصفح. السرّ لا يغادر تبويبك أبدًا.

وقّع رموزك الخاصّة

بدّل إلى وضع الترميز، عدّل الترويسة والحمولة بصيغة JSON، اختر الخوارزمية، اكتب سرًّا، واحصل على رمز موقَّع فورًا.

خصوصية بالتصميم

حمولات JWT تحتوي على معرّفات مستخدمين وبُرُد إلكترونية وأحيانًا نطاقات صلاحيات — لا تلصقها أبدًا في أداة على الخادم. فاكّ iKit يعمل كـ JavaScript داخل متصفحك. يمكن التحقّق من ذلك في DevTools ← Network.

وعي بانتهاء الصلاحية

المطالبات القياسية مثل exp وnbf وiat تُبرَز بتواريخ مقروءة وشارة واضحة EXPIRED / صالح لتعرف بنظرة واحدة هل لا يزال الرمز صالحًا.

معيار مفتوح، شيفرة مفتوحة

مبني على Web Crypto الأصلية في المتصفح ومحلّل JSON — نفس الخوارزميات المستخدمة في OpenSSL وlibjwt وjose. السلوك يطابق كلّ مكتبة JWT حديثة.

كيف يعمل فك ترميز JWT فعليًا

JWT هو ثلاثة أجزاء JSON مُرمَّزة بـ base64url مفصولة بنقاط — هذا كلّ شيء.

  1. 1

    الفصل عند النقطتين

    يبدو JWT مثل aaa.bbb.ccc. نفصل عند النقطتين الحرفيّتين، فنحصل على الترويسة والحمولة والتوقيع المُرمَّزة. إذا لم نحصل على ثلاثة أجزاء بالضبط، فالرمز مُشوَّه.

  2. 2

    فك ترميز Base64URL لكلّ جزء

    الترويسة والحمولة هما JSON بترميز UTF-8 مُرمَّز بـ base64url. Base64URL = Base64 مع -/_ بدلًا من +//= وبدون حشو. ننفّذ atob بعد إعادة استبدال الأحرف، ثم JSON.parse على النصّ الناتج.

  3. 3

    العرض ببنية واضحة

    الترويسة تخبرنا بالخوارزمية (alg: HS256، RS256، إلخ) والنوع. الحمولة تحتوي على المطالبات — القياسية منها (iss، sub، aud، exp، iat، nbf، jti) إضافة إلى أيّ حقول مخصّصة. نعرض كلًّا منها في قسم بوسم.

  4. 4

    التحقّق (HMAC فقط)

    بالنسبة لـ HS256/384/512، نُعيد حساب HMAC لـ header.payload باستخدام السرّ الذي كتبته ونقارنه بالتوقيع في الجزء الثالث. كما في HMAC(SHA-256, secret, signing_input) مُرمَّزًا بـ base64url. مطابقة = توقيع صالح.

مهامّ شائعة لتنقيح JWT

مواقف حقيقية ستحتاج فيها إلى فاكّ ترميز JWT.

فحص رمز من مزوّد المصادقة

Auth0 وFirebase وKeycloak وAWS Cognito كلّها تُعيد JWTs بعد تسجيل الدخول. الصق access_token لترى المطالبات التي يستقبلها تطبيقك فعلًا — ما هو معرّف المستخدم؟ ما النطاقات؟ متى ينتهي؟

تنقيح خطأ 401 Unauthorized

الـ API يرفض طلبك؟ فُكّ ترميز الرمز للتحقّق: هل هو منتهٍ (exp في الماضي)؟ هل مطالبة الجمهور (aud) مطابقة لما يتوقّعه الـ API؟ هل المُصدِر (iss) هو المستأجر الصحيح؟

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

Stripe وGitHub Apps وSlack تُرسل حمولات webhook موقَّعة كـ JWTs. بعد استقبال أحدها، الصقه في وضع فك الترميز مع السرّ المشترك للتأكّد من أنّ الطلب جاء فعلًا منهم.

توليد رموز اختبار

تحتاج JWT موقَّع جديد لاختبار تكامل؟ بدّل إلى وضع الترميز، عدّل الحمولة (معرّف مستخدم مخصّص، مدّة انتهاء مخصّصة)، اختر HS256 + سرّ الاختبار، احصل على رمز في أجزاء من الثانية. بلا جولة إلى الخادم.

لماذا يهمّ فك ترميز JWT محليًا

كثيرًا ما يحمل JWT معرّف المستخدم وبريده الإلكتروني والنطاقات وأحيانًا مكافئ ملفّات تعريف ارتباط الجلسة — وهي تحديدًا البيانات التي يجب ألّا تلصقها في خادم غريب. فاكّ iKit يعمل كـ JavaScript مُحمَّل بالفعل في تبويب متصفحك. يمكن التحقّق من ذلك في DevTools ← Network: لا fetch، لا XHR، لا beacon أثناء فك الترميز أو التحقّق.

  • صفر طلبات شبكة أثناء فك الترميز أو التحقّق — يمكن التحقّق منه في DevTools.
  • السرّ الذي تكتبه للتحقّق يبقى في ذاكرة المتصفح ويُمسح عند المسح / التحديث.
  • آمن لرموز الإنتاج ورموز وصول العملاء وأسرار webhook.

أدلة ذات صلة

دروس تفصيلية ومقارنات بين الأدوات من مدونة iKit.

الأسئلة الأكثر شيوعًا

هل هذا آمن؟ هل تُرفع رموز JWT الخاصّة بي؟

لا. الأداة بأكملها هي JavaScript داخل هذه الصفحة. تلصق الرمز، يحدث فك الترميز في متصفحك، والبايتات لا تغادر التبويب أبدًا. افتح DevTools ← Network وراقب — لا تُرسَل أيّ طلبات أثناء فك الترميز أو التحقّق. هذا يجعل من الآمن لصق رموز عملاء حقيقية أو رموز إنتاج.

ماذا يتحقّق توقيع JWT فعلًا؟

يُثبت أنّ الرمز وُقِّع بواسطة من يحمل السرّ (HMAC) أو المفتاح الخاصّ (RSA/ECDSA). لا يُشفّر الحمولة — فالترويسة والحمولة مجرّد JSON مُرمَّز بـ base64url، وأيّ شخص يملك الرمز يمكنه قراءتهما. التوقيع يمنع العبث فقط: إذا غيّرت بايتًا واحدًا في الحمولة، فلن يطابق التوقيع بعد ذلك.

لماذا تبدو حمولتي المفكوكة سليمة لكن التحقّق يفشل؟

ثلاثة أسباب شائعة: (1) سرّ خاطئ — أسرار JWT حسّاسة لحالة الأحرف وأيّ اختلاف في المسافات يكسر التحقّق. (2) عدم تطابق الخوارزمية — تقول الترويسة HS256 لكن السرّ استُخدم أصلًا مع HS512. (3) عُدِّل الرمز بعد التوقيع — حتى بايت واحد يكسر التوقيع. تحقّق من أنّ header.alg يطابق ما تتوقّعه.

ماذا عن RS256 وES256 وغيرها من خوارزميات المفتاح العام؟

iKit يدعم حاليًا تحقّق HMAC فقط (HS256/384/512). RS256 وES256 يستخدمان تشفير المفتاح العام — التحقّق يحتاج إلى المفتاح العام للمُصدِر بصيغة PEM، وهي واجهة أكثر تعقيدًا. حاليًا، يعمل فك الترميز (تظهر أجزاء header/payload/signature بشكل صحيح)، لكن زرّ التحقّق سيخبرك بأنّه غير مدعوم. تحقّق RSA/ECDSA مخطّط له.

ما الفرق بين هذا و jwt.io؟

نفس الفكرة، إعدادات افتراضية مختلفة. فاكّ iKit يعمل بالكامل داخل متصفحك (jwt.io يفعل ذلك أيضًا، لكن شيفرة iKit مفتوحة عبر view-source ولا توجد متعقّبات طرف ثالث في نطاقنا). نضيف شارة واضحة EXPIRED / صالح لمطالبة exp، وملاحظات منظَّمة للمطالبات (iat / nbf / iss / sub / aud / jti كصفوف مقروءة)، وزرّ نسخ كلّ المفكوك يمنحك المخرَج المنظَّم الكامل للصقه في تقرير علّة.