Utilia

مولّد JWT والتحقق منه

أنشئ رموز JWT وتحقّق منها بخوارزميات HS256 وRS256 وPS256 وES256 وEdDSA. عدّل المطالبات واضبط exp وiat وافحص التوقيع محليًا.

المفاتيح والرموز أسرار. يجري التوقيع والتحقق محليًا بواجهة Web Crypto في متصفحك: لا يُرفع أي شيء.

إنشاء رمز JWT موقَّع

المطالبات الزمنية:

التحقق من رمز JWT

كيف تنشئ رمز JWT موقَّعًا

  1. اختر الخوارزمية: HS256/384/512 (سر مشترك)، أو RS256/384/512 أو PS256/384/512 ‏(RSA)، أو ES256/384/512 ‏(ECDSA على المنحنيات P-256 أو P-384 أو P-521)، أو EdDSA ‏(Ed25519، إذا كان متصفحك يدعمه).
  2. عدّل الترويسة (JSON) والحمولة (مطالبات JSON). يتبع الحقل alg دائمًا الخوارزمية المختارة، وقيمة typ الافتراضية هي JWT.
  3. استخدم أزرار المطالبات الزمنية لإضافة التواريخ: iat = الآن وnbf = الآن، أو اختر مدة مثل «بعد ساعة» ثم انقر اضبط exp. القيم من نوع NumericDate، أي عدد الثواني منذ 1 يناير 1970 بتوقيت UTC.
  4. أدخل السر (لخوارزميات HS، كنص أو بصيغة Base64/Base64url من خيار صيغة السر) أو المفتاح الخاص (PEM أو JWK). ليس لديك مفتاح بعد؟ انقر أنشئ مفتاح اختبار.
  5. انقر وقّع الرمز، ثم انسخ النتيجة أو انقر تحقّق من هذا الرمز لفحصه فورًا.

كيف تتحقق من رمز JWT

  1. الصق الرمز في حقل الرمز المراد التحقق منه.
  2. اختر الخوارزمية المتوقعة. ترك الخيار على «من ترويسة الرمز» يقبل ما تذكره الترويسة، باستثناء none؛ أما اختيار خوارزمية محددة فيجعل الأداة ترفض أي رمز موقَّع بغيرها، كما يجب أن يفعل الخادم الحقيقي.
  3. أدخل السر أو المفتاح العام (PEM أو JWK): كتلة PEM من نوع PUBLIC KEY أو RSA PUBLIC KEY أو CERTIFICATE، أو JWK، أو مجموعة JWK Set (يُستخدم المفتاح الذي يطابق kid الخاص به ما في الترويسة).
  4. يمكنك اختياريًا ضبط هامش فرق الساعة (بالثواني) لتحمّل الفروق الصغيرة بين الساعات، ثم انقر تحقّق من الرمز.

تبيّن النتيجة هل التوقيع صالح، ثم تفحص exp (انتهاء الصلاحية) وnbf (غير صالح قبل) مقارنةً بالوقت الحالي في حاسوبك. والرمز ذو التوقيع الصحيح الذي انقضى تاريخ انتهائه يُعرض على أنه منتهي الصلاحية، لا على أنه صالح.

المفاتيح والصيغ

للتوقيع، تقبل الأداة كتل PKCS#8 من نوع PRIVATE KEY، وكتل PKCS#1 من نوع RSA PRIVATE KEY، وكتل SEC1 من نوع EC PRIVATE KEY (تُحوَّل داخليًا إلى PKCS#8)، إضافةً إلى مفاتيح JWK الخاصة. أما المفاتيح المحمية بكلمة مرور فيجب تصديرها أولًا دون كلمة مرور. ينشئ زر أنشئ مفتاح اختبار سرًا عشوائيًا بطول ناتج دالة التجزئة لخوارزميات HS، وزوج مفاتيح RSA بطول 2048 بت لـ RS وPS، والمنحنى المناسب لـ ES، أو زوج Ed25519. تحصل على المفاتيح بصيغتي PEM وJWK، وتُملأ في الجانبين معًا حتى تنجح دورة التوقيع ثم التحقق فورًا.

تتبع التواقيع المعيارين RFC 7515 وRFC 7518: يستخدم RSA-PSS ملحًا (salt) بطول دالة التجزئة، وتواقيع ECDSA هي الضم الخام r||s. ويعيد التنفيذ إنتاج مثال HS256 الوارد في RFC 7515، الملحق A.1.

ملاحظات أمنية

  • كل شيء يعمل في متصفحك عبر واجهة Web Crypto، ولا تُرسل الرموز ولا المفاتيح إلى أي مكان، ومع ذلك يُفضَّل استخدام مفاتيح اختبار بدلًا من أسرار بيئة الإنتاج.
  • alg: none لا يُوقَّع أبدًا ولا يُقبل أبدًا.
  • ينبغي أن يكون طول سر HMAC مساويًا على الأقل لطول ناتج دالة التجزئة (32 بايت لـ HS256)، والسر الأقصر يُظهر تحذيرًا.
  • التوقيع يُثبت السلامة والمصدر، لا ملاءمة المطالبات: يجب على الخوادم أيضًا فحص iss وaud ونطاقات الصلاحيات.

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

ما الفرق بين HS256 وRS256؟

يستخدم HS256 سرًا مشتركًا واحدًا للتوقيع والتحقق معًا، لذا يستطيع كل من يتحقق أن يزوّر الرموز أيضًا. أما RS256 (ومثله PS256 وES256 وEdDSA) فيوقّع بمفتاح خاص ويتحقق بمفتاح عام يمكن نشره بأمان.

لماذا يظهر خطأ رغم أن التوقيع صالح؟

لأن الرمز خارج فترة صلاحيته: قيمة exp في الماضي أو قيمة nbf في المستقبل. تُعرض نتيجة فحص التوقيع ونتيجة فحص الوقت كلٌّ على حدة.

لماذا تُرفض القيمة alg «none»؟

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

هل يمكنني استخدام مفتاح RSA أو EC خاص بي؟

نعم. الصق المفتاح الخاص بصيغة PEM أو JWK للتوقيع، والمفتاح العام للتحقق. وتتأكد الأداة من أن نوع المفتاح والمنحنى يطابقان الخوارزمية المختارة.

لماذا خيار EdDSA معطّل؟

لأن متصفحك لا يدعم Ed25519 في Web Crypto بعد. الإصدارات الحديثة من Chrome وEdge وFirefox وSafari تدعمه.