مقارنة · تحديث 2026-05-05
أدوات JWT في TaskKit مقابل jwt.io
كلتا الأداتين تفك ترميز JSON Web Tokens وتتحقّق منها بالكامل في المتصفح. الفروقات العملية في ما تحمّله كل أداة بجانب المحرّر، كيف تتصرف عند توقيع بطيء أو معادٍ، وعدد قليل من الميزات الموجودة عند هذه وغير موجودة عند تلك. الملخص أدناه مُقاس؛ بقية الصفحة تُكمل الصورة.
الملخص
- الخصوصية: TaskKit يقوم بـ 0 استدعاء لأطراف ثالثة عند أول عرض. jwt.io يقوم بـ 10 (OneTrust للموافقة على الكوكيز، Adobe Experience Platform، Google Tag Manager).
- تغطية الخوارزميات وصيغ المفاتيح: متطابقة عند الاثنين لمواصفة JWT — HS / RS / PS / ES / EdDSA، JWK و JWKS كاملة (مطابقة عبر
kid)،x5c، PKCS#1 / PKCS#8 / X.509 PEM. TaskKit يقبل إضافةً مفتاح EdDSA كخام hex أو base64url. - سلامة وقت التشغيل: TaskKit يتحقّق من التواقيع في Web Worker بمهلة 2 ثانية، فلا يقدر token معادٍ على تجميد الصفحة. jwt.io يتحقّق على الـ main thread.
- أين jwt.io أقوى: دليل مكتبات منسَّق، صفحة Introduction طويلة، وروابط لكل claim إلى الـ RFCs المعنية.
- ما يتركه TaskKit عن قصد: الجلب التلقائي للـ JWKS من رابط (يتطلّب استدعاء صادر). افتح فاكّ TaskKit.
الخصوصية، بالأرقام
كلتا الأداتين تدّعي أن العمل يجري في المتصفح. هذا الادعاء قيمته في إمكانية التحقّق منه. كل صفحة أدناه حُمّلت في 2026-05-05 على ملف Chrome جديد بكاش ممسوح، وكل طلب شبكة صادر اُحتسب قبل كتابة حرف واحد. نفس الاختبار يجري على فاكّ JWT في TaskKit.
| الشبكة عند أول عرض | jwt.io | TaskKit |
|---|---|---|
| طلبات لأطراف ثالثة | 10 | 0 |
| OneTrust لموافقة الكوكيز | محمَّل (5 استدعاءات) | لا |
| Adobe Experience Platform / DTM | محمَّل (3 استدعاءات) | لا |
| Google Tag Manager | محمَّل | لا |
| بحث جغرافي | نقطة OneTrust الجغرافية | لا |
| شريط موافقة الكوكيز | نعم، يحجب أول عرض حتى تغلقه | لا يوجد |
| جدار تسجيل دخول للمزايا المتقدمة | لا | لا |
كل واحدة من هذه الاستدعاءات تُطلَق قبل أن تلصق الـ token. لا واحد منها ضروري لفك ترميز JWT — كلها تحليلات، إدارة وسوم، وبنية تدفّق الموافقة. TaskKit ما يشحن أيّ منها. المزيد عن طريقة تعامل TaskKit مع بياناتك.
مصفوفة الميزات
كلتا الأداتين تغطّيان مواصفة JWT بالكامل تقريباً. تحت ما يقبله كل منهما اليوم، مجمَّعاً حسب الفئة.
| الإمكانية | jwt.io | TaskKit |
|---|---|---|
| الخوارزميات | ||
| HS256 / 384 / 512 | نعم | نعم |
| RS256 / 384 / 512 | نعم | نعم |
| PS256 / 384 / 512 | نعم | نعم |
| ES256 / 384 / 512 | نعم | نعم |
| EdDSA (Ed25519) | نعم | نعم (عبر @noble/ed25519) |
| صيغ المفاتيح | ||
| JWK (مفرد) | نعم | نعم |
| JWKS مع بحث kid | نعم | نعم |
| PEM SPKI (BEGIN PUBLIC KEY) | نعم | نعم |
| PEM PKCS#1 RSA (BEGIN RSA PUBLIC KEY) | جزئي | نعم (قارئ ASN.1 محلي) |
| شهادة X.509 (BEGIN CERTIFICATE) | نعم | نعم (استخراج SPKI تلقائياً) |
| التقاط x5c من الـ header تلقائياً | نعم | نعم (السلسلة غير متحقَّق منها، يُذكر صراحةً) |
| EdDSA كـ hex / base64url خام | لا | نعم (64 رمزاً ست عشرياً أو 43 رمز base64url) |
| سلامة التحقّق | ||
| عزل في Web Worker | لا | نعم |
| مهلة catastrophic backtracking | لا | نعم (2 ثانية) |
| رفض alg:none مع شرح | نعم | نعم |
| الموقّع | ||
| تحرير الـ header / payload | نعم | نعم |
| حقول نموذج للـ claims المسجَّلة | لا | نعم |
| قبول مفاتيح PKCS#1 الخاصة مباشرةً | لا | نعم (تُلَفّ تلقائياً إلى PKCS#8) |
| EdDSA الخاص كـ hex / base64url | لا | نعم |
| token مثال بنقرة واحدة | نعم | نعم (iat/exp تُحسب لحظياً) |
| الخصوصية / وقت التشغيل | ||
| كل المعالجة في المتصفح | نعم | نعم |
| صفر استدعاءات شبكة لأطراف ثالثة | لا | نعم |
| شريط موافقة الكوكيز | نعم | لا يوجد |
| Cloudflare Web Analytics اختياري (يحترم الخصوصية، مطفأ افتراضياً) | — | مطفأ ما لم يُستضف ذاتياً مع token |
سلامة وقت التشغيل
verify في WebCrypto سريع على التواقيع المُحكَمة. على
الإدخال المعادي ليس كذلك. أُسس RSA مرضيّة، مفاتيح ضخمة، تواقيع Ed25519
معطوبة، أو JWKS مصمَّمة بخبث — كلها تقدر تحبس المتحقّق طويلاً بما يكفي
لتجميد التبويب. وهذا قلق حقيقي حين يأتي الـ token الذي أمامك من
مصدر غير موثوق.
TaskKit يشغّل التحقّق من التوقيع في Web Worker مخصَّص بمهلة 2 ثانية
حقيقية. لو تجاوز الـ worker الميزانية، يُنهَى وتظهر الصفحة خطأً بدل
أن تعلق. jwt.io يتحقّق على الـ main thread، فالتوقيع البطيء يعني
صفحة بطيئة. نفس البنية تحمي مختبر التعابير المنتظمة في TaskKit (ضد
backtracking من نوع (a+)+b) ومنسّق JSON (ضد parses
بحجم ميغابايت متعددة).
تفاصيل المحرّر اللي تفرق يومياً
- تظليل بثلاثة ألوان داخل الإدخال. الاثنتان تلوّنان أجزاء الـ token الثلاثة، لكن jwt.io يلوّنها فقط في لوحة «decoded» للقراءة فقط. TaskKit يلوّن الأجزاء داخل الـ textarea اللي تحرّر فيها فعلاً، فيسهل ملاحظة نقطة مُلصَقة في غير محلها.
- تسميات claims دائماً مرئية. أسماء الـ claims
المبسَّطة في jwt.io (
iat → "Issued at") مخفيّة خلف تبويب «Claims Breakdown». TaskKit يعرضها inline تحت الـ payload، فالتواريخ والأوصاف ظاهرة بنظرة واحدة. - تعامل صريح مع
x5c. لمّا يُستخدمx5cمن الـ header للتحقّق، شريط النتيجة في TaskKit يقول «تم التحقّق بشهادة x5c من الـ header (السلسلة غير متحقَّق منها)» بدل ما يوحي بثقة من البداية للنهاية. التحقّق من السلسلة وصولاً لمرجع تصديق يحتاج جلب جذور CA، وهذا خارج نطاق أداة تشتغل في المتصفح فقط. - مفتاح تبديل HMAC base64url. بعض مفاتيح HMAC
تُحفظ بايتات مرمَّزة بـ base64url (مثلاً مفتاح JWKS من نوع
octفيه حقلk). مفتاح تبديل صغير بجانب رقاقة الخوارزمية يبدّل تفسير حقل السر بين سلسلة حرفية وبايتات base64url، فما تحتاج تفك الترميز بنفسك. - إدخال مفتاح EdDSA خام. الصق مفتاح Ed25519 كـ 64 رمزاً ست عشرياً، 43 رمز base64url، JWK، أو PEM. jwt.io يتوقّع PEM أو JWK فقط.
أين jwt.io أقوى
المقارنة المفيدة ليست عرضاً من جانب واحد. ثلاثة أشياء يفعلها jwt.io أفضل بوضوح اليوم:
- دليل المكتبات. فهرس منسَّق وقابل للتصفّح لمكتبات JWT حسب اللغة. لو تبحث عن تنفيذ تضيفه لخدمة، فدليل jwt.io هو المكان الصحيح.
- صفحة Introduction طويلة. صفحة كانونية واحدة لـ«ما هو JWT» تشرح المفهوم من البداية للنهاية. شرح TaskKit أسفل الفاكّ أقصر وموجَّه للأداة.
- روابط RFC لكل claim. كل claim مسجَّل يربط بقسم RFC الذي يعرّفه. شيء صغير، لكنه مفيد لمّا تتحقّق من الالتزام بالمواصفة.
ما يتركه TaskKit عن قصد
ضمان الخصوصية أسهل عند عدم وجود أبواب خلفية مدمَجة. بضع ميزات تقدّمها أدوات أخرى مفقودة هنا عن قصد.
- OIDC auto-discovery. بعض الأدوات تخلّيك تلصق
رابط issuer وتجلب صامتاً
.well-known/openid-configurationللمفاتيح. هذا طلب صادر من متصفحك إلى طرف ثالث — والرابط نفسه قد يكشف تفاصيل الـ deployment. TaskKit يطلب منك أن تلصق الـ JWKS بنفسك. - حقل JWKS عبر URL. نفس المنطق. أمر
curlمن سطر واحد في طرفيتك يتفوّق على fetch صادر من الصفحة التي تصحّحها. - التحليلات افتراضياً. الكود يدعم Cloudflare Web Analytics اختياري يحترم الخصوصية، لكنه يبقى مطفأ إلا إذا فعّله المُشغّل صراحةً. النسخة المستضافة على taskkit.net مطفأة كذلك.
- الحسابات والتاريخ على الخادم. الحفظ والمشاركة تحدثان عبر URL fragments حيثما كان ذلك مدعوماً. لا شيء يُخزَّن على خادم لأن لا يوجد خادم.
جرّب أدوات JWT في TaskKit
فاكّ JWT
الصق token، افحص الـ claims، وتحقّق من التوقيع بمقابل مفتاح، JWKS، أو شهادة x5c مضمَّنة.
موقّع JWT
وقّع token محلياً بـ HS أو RS أو PS أو ES أو EdDSA. المفتاح الخاص يبقى في التبويب.
المنهجية
اختُبر في 2026-05-05 على Chrome بكاش ممسوح وكوكيز first-party محذوفة. طلبات الشبكة عُدَّت من تحميل الصفحة حتى أول ضغطة مفتاح. مصفوفة الميزات تعكس سلوك كل أداة في ذلك التاريخ، وستُعاد المراجعة لمّا تُطلق أيّ من الأداتين تغييراً جوهرياً.
jwt.io علامة تجارية لمالكها. هذه الصفحة لا ترتبط بـ jwt.io ولا تحظى بدعمه.