قارئ JWT

فك ترميز ⁦JWT⁩

اقرأ الترويسة والحمولة لمعرفة ما يحمله رمز ⁦JWT.⁩ ألصق الرمز أو قيمة ⁦Bearer⁩ لعرض ⁦exp⁩ و⁦iat⁩ و⁦nbf⁩ بتوقيت ⁦UTC⁩، دون الحاجة إلى مفتاح لقراءة المحتوى.

قارئ ⁦JWT⁩فك الترميز داخل المتصفح
يمكن إدخال ⁦JWT⁩ أو قيمة ⁦Authorization: Bearer.⁩ لا ترسل الأداة الرموز إلى واجهة ⁦API⁩ لفك الترميز ولا تحفظ المدخلات.
جرّب مثالًا
فك ترميز فقط · لم يُتحقق من التوقيع

قد تكون البيانات المقروءة مزوّرة. تحقّق من التوقيع ومن الشروط التي يفرضها التطبيق قبل الوثوق بالرمز.

01 الترويسة

الخوارزمية وبيانات الرمز

{
  "alg": "HS256",
  "typ": "JWT"
}

02 الحمولة

المطالبات داخل الرمز

{
  "sub": "demo-user",
  "iss": "https://example.com",
  "aud": "demo-api",
  "iat": 1704067200,
  "nbf": 1704067200,
  "exp": 1704070800
}

الحقول الزمنية UTC

المقارنة مع ساعة الجهاز دون هامش لاختلاف التوقيت. هذه المقارنة لا تثبت صلاحية الرمز.

الحقلالوقت بتوقيت ⁦UTC⁩المقارنة مع ساعة الجهاز
iatوقت الإصدار2024-01-01T00:00:00.000Zجارٍ قراءة ساعة الجهاز…
nbfبداية الاستخدام2024-01-01T00:00:00.000Zجارٍ قراءة ساعة الجهاز…
expوقت الانتهاء2024-01-01T01:00:00.000Zجارٍ قراءة ساعة الجهاز…

03 التوقيع

الخوارزمية المعلنة: HS256 · 11 بايت · غير متحقق منه

cGxhY2Vob2xkZXI

لماذا ترفض الواجهة رمزًا لم تنتهِ صلاحيته؟

وقت الانتهاء ليس الشرط الوحيد. يشير aud إلى الجهة المستهدفة، وقد يكون نصًا واحدًا أو مصفوفة نصوص. يحدد iss الجهة المصدرة، بينما يعبّر sub عن صاحب المطالبات أو موضوعها. قد يكون الرمز مخصصًا لخدمة أخرى أصلًا.

هذه الحقول مطالبات داخل الرمز، وليست حقائق أثبتتها الأداة. قراءة المحتوى لا تثبت هوية مصدره. التطبيق أو البروتوكول هو الذي يحدد الحقول المطلوبة والقيم المقبولة.

الترويسة والحمولة والتوقيع

يتكوّن ⁦JWT⁩ الموقّع المعتاد من header.payload.signature. يحتوي أول جزأين على كائنات ⁦JSON⁩ بنص ⁦UTF-8⁩ مرمّزة باستخدام ⁦Base64url.⁩ أما الجزء الأخير فيحتوي على بايتات توقيع أو ⁦MAC⁩، وليس كائن ⁦JSON⁩ ثالثًا.

يمكن لصق الرمز وحده أو مع Bearer أو Authorization: Bearer. لا تلصق طلب ⁦HTTP⁩ كاملًا. يمكن نسخ كل من الترويسة والحمولة منفصلًا، وتبقى كتابة الأعداد الأصلية محفوظة، بما فيها المعرّفات الصحيحة الكبيرة.

قراءة ⁦exp⁩ بوحدة الثانية

يمثل exp وقت الانتهاء، وnbf بداية السماح بالاستخدام، وiat وقت الإصدار. تُفسّر هذه القيم بصيغة ⁦NumericDate⁩، أي ثوانٍ منذ بداية حقبة ⁦Unix.⁩ مثلًا، ⁦1704067200⁩ يوافق ⁦1⁩ يناير ⁦2024⁩ الساعة ⁦00:00⁩ بتوقيت ⁦UTC⁩، وليس قيمة بالملّي ثانية كما في ⁦JavaScript.⁩

تستخدم المقارنة ساعة الجهاز دون هامش لاختلاف الساعات. وجود ⁦exp⁩ في المستقبل لا يثبت صحة التوقيع أو تطابق الجهة المستهدفة. كما أن وقت إصدار مستقبلي يُعرض كمعلومة للفحص، ولا ينتج عنه حكم شامل من الأداة.

فك الترميز ليس فك تشفير ولا تحققًا من التوقيع

⁦Base64url⁩ طريقة تمثيل للبيانات، وليست وسيلة لإخفائها. لذلك يمكن قراءة ⁦JWT⁩ الموقّع دون معرفة السر. قبل قبول الرمز، يجب على الخدمة التحقق من حمايته التشفيرية بمفاتيح موثوقة وخوارزميات مسموحة، ثم فحص المطالبات المطلوبة. لا يكفي الاعتماد على ⁦alg⁩ الواردة في الرمز لتحديد الثقة.

لا تفتح الأداة عناوين المفاتيح ولا تستخدم مفاتيح مضمّنة. لا تدعم فك تشفير ⁦JWE⁩ ذي الأجزاء الخمسة أو ⁦JWT⁩ المتداخل أو ⁦b64: false.⁩ الحد الأقصى ⁦50,000⁩ محرف و⁦64⁩ مستوى ⁦JSON.⁩ تُرفض المفاتيح المكررة لتجنب تفسير الحقل بأكثر من طريقة.

تعلّم من الأمثلة

رمز منتهي الصلاحية

بيانات افتراضية وتوقيع توضيحي؛ ليس رمزًا صالحًا لتسجيل الدخول.

العودة إلى قارئ ⁦JWT⁩

بلا توقيع

⁦alg: none⁩ مع جزء ثالث فارغ.

العودة إلى قارئ ⁦JWT⁩

مطالبات ⁦Unicode⁩

نص بلغات متعددة وعدة جهات مستهدفة؛ التوقيع توضيحي.

العودة إلى قارئ ⁦JWT⁩

أسئلة شائعة

هل أحتاج إلى مفتاح سري لقراءة ⁦JWT⁩؟

لا، إذا كان من ثلاثة أجزاء وكانت الترويسة والحمولة كائني ⁦JSON.⁩ قراءة ⁦Base64url⁩ لا تحتاج إلى مفتاح. أما التحقق التشفيري فيحتاج إلى مفتاح مناسب، وهو خارج وظائف هذه الأداة.

ما معنى ⁦alg: none⁩؟

يعني أن الرمز غير محمي بتوقيع تشفيري. يبقى الجزء الثالث موجودًا لكنه فارغ، ولذلك يجب أن ينتهي الرمز بنقطة. إمكانية قراءته لا تجعله موثوقًا للمصادقة.

هل تحفظ الأداة الرمز؟

تُعالج المدخلات في المتصفح، ولا تُرسل إلى ⁦API⁩ لفك الترميز، ولا تُحفظ بواسطة الأداة أو تُضاف إلى عنوان الصفحة. قد يمنح رمز ⁦Bearer⁩ حقيقي صلاحية وصول؛ استخدم الأمثلة الافتراضية عند التجربة.

هل تصلح الأمثلة لتسجيل الدخول؟

لا. مثال الرمز المنتهي يحمل ⁦exp⁩ يوافق ⁦1⁩ يناير ⁦2024⁩ الساعة ⁦01:00 UTC⁩ وتوقيعًا توضيحيًا. مثال ⁦Unicode⁩ يعرض نصوصًا بلغات مختلفة وعدة جهات مستهدفة بتوقيع توضيحي أيضًا. المثال بلا توقيع يستخدم ⁦alg: none.⁩

كيف أصحح خطأ التنسيق؟

تحقق من اكتمال الأجزاء الثلاثة وعدم وجود مسافات أو اقتباسات أو حشو زائد. يجب أن يكون أول جزأين كائني ⁦JSON⁩ بترميز ⁦UTF-8.⁩ تُرفض المفاتيح المكررة والتواقيع الفارغة المخالفة لقيمة ⁦alg.⁩ وقد تشير خمسة أجزاء إلى ⁦JWE⁩ مشفّر.

RFC 7519 · RFC 7515 · RFC 8725

العودة إلى قارئ JWT