المطوّرون 🔒 يعمل داخل متصفحك — لا تُرسل أي بيانات

مولّد JWT

وقّع رمز JSON Web Token خاصًا بك لاختبار نقطة نهاية، بالخوارزميات الاثنتي عشرة نفسها التي يستخدمها مُصدِر حقيقي، ومن دون أن يغادر المفتاح متصفحك.

رمز JWT
السرّ أو المفتاح العام
يُستخدم المفتاح داخل متصفحك ولا يُرسل إلى أي مكان.
بعد فك الترميز
الترويسة

          
        
الحمولة

        
التوقيع

وقّع رمزًا خاصًا بك لاختبار نقطة نهاية. كل شيء يُحسب داخل هذه الصفحة.

مفتاح التوقيع

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

إنشاء رمز JSON Web Token موقَّع

أغلب العمل مع الرموز هو قراءتها، وهذا ما تفعله أداة فك ترميز JWT. وأحيانًا تحتاج الاتجاه الآخر: رمزًا لم يوجد بعد، لترى كيف تتصرف الخدمة معه. واجهة اختبار ترفض كل شيء، وسيط برمجي تكتبه الآن، بيانات اختبار يجب أن تنتهي صلاحيتها بعد خمس دقائق — كلها تحتاج رمزًا تتحكم به أنت، وهذا ما توقّعه هذه الصفحة.

تفتح على تبويب إنشاء رمز. وكل ما فيه — قائمة الخوارزميات والحمولة والمفتاح — يجمّعه متصفحك ويوقّعه عبر crypto.subtle.sign. لا يُرسَل أي طلب إلى خادم في أي لحظة، فالمفتاح الذي تلصقه يبقى خاصًا بقدر خصوصية التبويب الذي كُتب فيه.

مخطط: رمز JWT مقسوم عند نقطتيه إلى ترويسة وحمولة وتوقيع؛ تتحول الترويسة والحمولة إلى JSON مقروء، والتوقيع HMAC لكليهما.eyJhbGciOiJIUzI1NiIs….eyJzdWIiOiIxMjM0NTY3….2N-E3ZkgLmbR…الترويسةالحمولة (Claims)التوقيع{ "alg": "HS256", "typ": "JWT"}{ "sub": "1234567890", "name": "Ada Lovelace", "iat": 1700000000, "exp": 1700003600}HMACSHA256( header + "." + payload, secret)JSON بترميز Base64URL: يقرؤه أي أحدJSON بترميز Base64URL: يقرؤه أي أحديُتحقَّق منه بالمفتاح السري
رمز JWT هو ثلاث سلاسل Base64URL تفصل بينها نقاط. الترويسة والحمولة JSON عادي يستطيع أي شخص فك ترميزه، لذلك لا يجوز أن يحمل الرمز أسرارًا. التوقيع وحده، بعد التحقق منه بالمفتاح، يُظهر أن الرمز لم يُعدَّل.

ما ينتهي إليه محتوى الترويسة والحمولة

تُكتب الترويسة نيابةً عنك: الخوارزمية التي اخترتها وtyp: "JWT"، ويضاف kid إن ملأت ذلك الحقل. ومعرّف المفتاح يهم حين تحتفظ الخدمة المستقبِلة بعدة مفاتيح وتختار واحدًا بالاسم؛ واتركه فارغًا تبقَ الترويسة بحقلين.

الحمولة لك. مطالبتان ليستا كذلك: يضع التوقيع دائمًا iat بالوقت الحالي، ويضبط exp من قائمة تنتهي صلاحيته بعد — خمس دقائق أو ساعة أو يوم أو ثلاثين يومًا أو لا شيء. وحين يظهر الرمز يُعاد كتابة صندوق الحمولة بما وُقِّع تمامًا، فالأوقات التي تراها هي الأوقات التي بداخله. وإن كانت هاتان المطالبتان محور اختبارك، يشرح فاحص انتهاء الصلاحية كيف يقرأهما الخادم.

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

تنقسم الخوارزميات الاثنتا عشرة إلى عائلتين، والفرق ليس في القوة بل في مَن عليه أن يحتفظ بالمفتاح.

العائلةالمفتاح الذي تلصقهاستخدمها حين
HS256 / HS384 / HS512سرّ مشترك، نصًّا أو بصيغة Base64خدمة واحدة تُصدر رموزها وتتحقق منها بنفسها
RS256 / RS384 / RS512مفتاح خاص PKCS#8 (PEM) أو JWKخدمات كثيرة تتحقق، ولا ترى سوى النصف العام
PS256 / PS384 / PS512المفتاح الخاص نفسه من نوع RSARSA بحشوة PSS الأحدث، حين يطلبها الطرف المستقبِل
ES256 / ES384 / ES512مفتاح خاص EC على P-256 / P-384 / P-521تريد توقيعات قصيرة ومفاتيح صغيرة

اختير HS256 افتراضيًا لأنه ما يجري اختباره عادةً: سرّ في متغيّر بيئة، وخدمة واحدة على الطرفين. وما إن تحتاج أكثر من خدمة إلى فحص الرمز، تصبح خوارزمية المفتاح العام الشكل الأنسب، إذ لا يُسلَّم المتحقِّق أبدًا ما يمكّنه من إصدار رموز.

ما ينفع فيه الرمز المولَّد وما لا ينفع

الرمز الموقَّع هنا رمز حقيقي: الصقه في أداة فك الترميز أعلاه، واضغط تحقّق من التوقيع بالمفتاح نفسه فيصحّ التوقيع، لأن الصفحة تحسبه كما تحسبه أي مكتبة. وهذا يجعله صالحًا لبيانات الاختبار، ولإعادة إنتاج خلل برمز منتهٍ أو غير صالح بعد، ولمعرفة هل يتحقق وسيطك البرمجي من aud فعلًا أم يكتفي بقراءته.

أما ما ليس هو، فهو طريق دخول. لا يقبل الرمزَ إلا خدمة تملك المفتاح المقابل، فتوقيع رمز بسرّك أنت لا يثبت شيئًا لأحد آخر. هذا هو عمل التوقيع كله، ولهذا ينتهي الفرق بين الرمز وكعكة الجلسة إلى سؤال: مَن عليه أن يخزّن ماذا.

المفاتيح والصيغ والأخطاء التي تسببها

في عائلة HS، الصق السرّ نصًّا كما هو، أو علّم السرّ بصيغة Base64 إن كان إعدادك يخزّنه مرمَّزًا: النصّ نفسه، خامًا ومفكوك الترميز، يعطي توقيعين مختلفين تمامًا، وهذا سبب شائع لأن ينجح رمز في مكان ويفشل في آخر.

ولـ RS وPS وES يقبل المتصفح ملف PEM من نوع PKCS#8 — الكتلة التي تبدأ بـ -----BEGIN PRIVATE KEY----- — أو JWK، وهي صيغة JSON التي تُوزَّع بها مجموعات المفاتيح. أما الكتلة الأقدم -----BEGIN RSA PRIVATE KEY----- فهي PKCS#1 ويجب تحويلها أولًا. وإن لصقت مفتاحًا عامًا سهوًا قالت لك الصفحة ذلك بدل أن تفشل برسالة غامضة، لأن المفتاح العام يتحقق من توقيع ولا ينشئه أبدًا.

أدلة ذات صلة