tigtools

مولّد JWT

أنشئ توكن JWT ووقّعه لأغراض الاختبار، أو تحقق مما إذا كان توقيع HMAC للتوكن يطابق السر. يتم التوقيع باستخدام Web Crypto API في متصفحك.

تعمل في متصفحك لا يلزم التسجيل

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

يتم تعيين alg من قائمة الخوارزمية؛ وتكون قيمة typ الافتراضية JWT.

مطالبات مثل sub وiat وexp. الأوقات بالثواني منذ 1970 (UTC).

أدخل سرًا لتوقيع الرمز.

كيفية الاستخدام

  1. اختر HS256 أو HS384 أو HS512.
  2. عدّل مطالبات الحمولة، وانقر على “Set iat and exp” لإضافة الوقت الحالي وتاريخ انتهاء الصلاحية.
  3. أدخل سرًا تجريبيًا، أو أنشئ سرًا عشوائيًا بطول 256 بت.
  4. انسخ التوكن الموقّع. للتحقق من توكن، بدّل إلى «التحقق من التوقيع»، والصقه وأدخل السر.

كيف تعمل الأداة

يتكون رمز JSON Web Token (RFC 7519) من ثلاثة أجزاء مشفّرة بتنسيق Base64URL: ترويسة وحمولة من المطالبات وتوقيع. باستخدام خوارزميات HMAC وهي HS256 وHS384 وHS512، يكون التوقيع HMAC مع SHA-256 أو SHA-384 أو SHA-512 على النص “header.payload”، بمفتاح سري مشترك. أي شخص يملك السر يمكنه إنشاء الرموز والتحقق منها.

تقوم الأداة بتسلسل الترويسة والحمولة بتنسيق JSON مضغوط، وتشفيرهما، وتوقيعهما باستخدام crypto.subtle، أي واجهة Web Crypto API المدمجة في متصفحك. حقل alg في الترويسة يطابق دائمًا الخوارزمية المختارة، ويكون typ افتراضيًا JWT، ويتم الاحتفاظ بأي حقول ترويسة أخرى مثل kid. خيار “Set iat and exp” يكتب الوقت الحالي كـ iat (وقت الإصدار) ويضيف مدة الصلاحية المختارة كـ exp، وكلاهما بالثواني منذ 1 يناير 1970 UTC. تطابق النتيجة مكتبات JWT الأخرى؛ على سبيل المثال، يتم إعادة إنتاج نموذج jwt.io الكلاسيكي تمامًا.

يمكن أن يكون السر نصًا عاديًا (بايتات UTF-8 الخاصة به هي المفتاح) أو بايتات مشفرة بتنسيق Base64/Base64URL، وهو ما تستخدمه العديد من الأطر. زر السر العشوائي ينشئ 32 بايتًا عشوائيًا باستخدام crypto.getRandomValues. بالنسبة لـ HS256، استخدم 32 بايتًا عشوائيًا على الأقل؛ فالأسرار القصيرة التي يختارها البشر يمكن تخمينها دون اتصال من أي رمز.

يقوم التحقق بفك ترميز الرمز، ويتأكد من أنه يستخدم خوارزمية HMAC، ويعيد حساب التوقيع باستخدام crypto.subtle.verify. كما يعرض عندما يشير exp أو nbf إلى أن الرمز منتهي الصلاحية أو لم يصبح صالحًا بعد. خوارزميات RS256 وES256 وغيرها من خوارزميات المفتاح العام غير مدعومة، والتحقق هنا لا يفحص المُصدر أو الجمهور أو أي مطالبات أخرى قد يتطلبها تطبيقك.

أمثلة

اختبار API محليًا

يتوقع خادم التطوير لديك رموز HS256 موقعة باستخدام “dev-secret-change-me”. عيّن sub إلى معرف مستخدم تجريبي، وانقر على “Set iat and exp” مع ساعة واحدة، وأدخل السر وأرسل الرمز في ترويسة Authorization: Bearer.

التحقق من المفتاح السري الذي وُقّع به الرمز

يُرفَض رمز تجريبي. الصقه في «التحقق من التوقيع» وجرّب المفتاح السري التجريبي: «التوقيع غير صالح» يخبرك بأن الرمز وُقّع بمفتاح سري مختلف أو أن المفتاح السري بصيغة مختلفة (نص مقابل Base64).

إعادة إنتاج نموذج jwt.io

باستخدام الترويسة {"alg":"HS256","typ":"JWT"} والحمولة {"sub":"1234567890","name":"John Doe","iat":1516239022} والمفتاح السري “your-256-bit-secret”، ينتهي الرمز بـ SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c، وهو نفسه الموجود على jwt.io.

الأسئلة الشائعة

هل يُرسَل المفتاح السري الخاص بي إلى خادمكم؟

لا. يتم التوقيع والتحقق باستخدام Web Crypto API داخل متصفحك، ولا يتم تخزين المفتاح السري أو إرساله إلى أي مكان. ننصح مع ذلك باستخدام مفاتيح سرية تجريبية فقط، لأن مفتاح التوقيع الحقيقي يجب ألا يُكتب أبدًا في أي موقع ويب.

لماذا يكون التوقيع غير صالح مع أن المفتاح السري صحيح؟

تحقق من صيغة المفتاح السري. بعض الأنظمة تستخدم نص المفتاح السري، بينما تفك أنظمة أخرى ترميز Base64 أولًا، مما يعطي بايتات مفتاح مختلفة. تحقق أيضًا من أن الرمز لم يتغير وأنه يستخدم الخوارزمية نفسها.

هل يمكنني إنشاء رموز RS256 أو ES256؟

ليس باستخدام هذه الأداة. فهي تدعم فقط خوارزميات HMAC ذات المفتاح السري المشترك HS256 وHS384 وHS512.

هل الحمولة مشفّرة؟

لا. توكن JWT الموقّع يكون مرمّزًا فقط؛ يمكن لأي شخص فك ترميزه وقراءة الحمولة. التوقيع يثبت فقط عدم تغييره. لا تضع كلمات مرور أو أسرارًا أخرى في الحمولة.

الخصوصية

يتم إنشاء التوكنات والتحقق منها في متصفحك فقط باستخدام Web Crypto API. لا يتم رفع الترويسة أو الحمولة أو التوكن أو السر أو تخزينها أو تضمينها في التحليلات.