نظرة عامة
هذه الأداة تأخذ أي JSON Web Token وتقسمه لأجزائه الثلاثة — header و payload و signature — وتعرض المحتوى بعد فك الترميز مع الـ claims المسجّلة (iss، sub، aud، exp، iat، nbf، jti). مدة الصلاحية تُحسب من exp و nbf لتعرف من نظرة واحدة هل الـ token ساري أم لا.
تدعم كذلك التحقّق من التوقيع بالخوارزميات التي تستخدمها APIs فعلاً: HS256/384/512 بسر مشترك، RS256/384/512 و PS256/384/512 بمفتاح RSA عام، ES256/384/512 بمفتاح EC عام، و EdDSA بمفتاح Ed25519. يمكنك لصق المفتاح العام كـ JWK، أو JWKS كاملة (TaskKit يلتقط المفتاح المناسب بمطابقة kid)، أو كتلة PEM SPKI، أو RSA PEM PKCS#1، أو شهادة X.509 (يُستخرج المفتاح العام تلقائياً)، أو — لـ EdDSA — 64 رمزاً ست عشرياً أو 43 رمزاً base64url. وإن احتوى الـ header على x5c (سلسلة شهادات X.509 مضمّنة)، تُستخدم شهادة الورقة تلقائياً حين يكون حقل المفتاح فارغاً.
متى تحتاجها
- فحص token راجع من auth server المحلي أثناء التطوير.
- التأكد من أن claims token من طرف ثالث تطابق ما يتوقّعه عميلك.
- التحقّق من أن الـ token المُحدَّث موقّع بنفس المفتاح السابق.
- فحص الـ expiry عندما يتعطّل شيء بالضبط عند منتصف الليل UTC.
كيف تعمل
فك الترميز ما هو إلا Base64URL — مواصفة JWT تستخدم Base64 الآمن للروابط مع تجريد الـ padding. الـ header والـ payload بصيغة JSON؛ التوقيع بايتات خام. التحقّق يستخدم crypto.subtle.verify، يعني WebCrypto المدمج في المتصفح، مع أخذ الخوارزمية من الـ header. EdDSA يمرّ على @noble/ed25519 لأن دعم Ed25519 في WebCrypto لا يزال متفاوتاً بين المتصفحات.
إدخال المفتاح متساهل في الصيغ. مفاتيح HMAC تُستورد كبايتات خام أو JWK. ومفاتيح RSA و PS و ES تُقبل كـ JWK، JWKS (يختار kid المفتاح المناسب — والمجموعات ذات المفتاح الواحد تُستخدم مباشرةً)، PEM SPKI (BEGIN PUBLIC KEY)، PEM PKCS#1 RSA (BEGIN RSA PUBLIC KEY)، أو شهادة X.509 (BEGIN CERTIFICATE) — TaskKit يقرأ الشهادة بقارئ ASN.1 صغير مدمج لاستخراج SubjectPublicKeyInfo المضمّن. ومفاتيح EdDSA تكون JWK، JWKS، SPKI PEM، 64 رمزاً ست عشرياً، أو 43 رمزاً base64url.
لا يجري شيء على الخادم. الـ token لا يغادر متصفحك، المفتاح لا يغادر متصفحك، ولا يوجد تتبّع لأيٍ منهما. إن لصقت token إنتاج لتصحيح خطأ، الـ auditor لديك لن يرى أي طلب لـ taskkit.net يحمل هذا الـ token.
ملاحظات
لماذا تُرفض «alg: none» حتى عندما يبدو الـ token صالحاً؟ لأنه لا يوجد JWT يجب أن يستخدم في الواقع alg: none. هذه ثغرة معروفة: إذا قبل المتحقّق لديك none، المهاجم يستطيع تجريد التوقيع وتزوير أي payload. لهذا نظهرها كخطأ بدلاً من تمريرها بصمت.
هل يمكنني التحقّق من token من Microsoft أو Google أو Auth0؟ نعم — اجلب JWKS الخاصة بالـ issuer (مثلاً https://login.microsoftonline.com/common/discovery/v2.0/keys) والصق الوثيقة كاملة في حقل المفتاح. TaskKit يقرأ kid من الـ header ويلتقط الـ JWK المطابق تلقائياً؛ لا حاجة لبحث يدوي.
HS256 أم RS256 — أيّهما أستخدم؟ RS256 (أو ES256) لأي شيء يتحقّق منه طرف خارجي، لأنه يحتاج المفتاح العام فقط. HS256 مناسب للتواصل بين الخدمات عندما يحتفظ الطرفان بنفس السر.
لديّ token يحتوي على x5c — هل أنا واثق بالشهادة المضمّنة فيه؟ TaskKit يستخدم شهادة الورقة من x5c للتحقّق من التوقيع عندما لا تلصق مفتاحاً، حتى تتأكد من أن محتوى الـ token لم يتم العبث به. لكنه لا يتحقّق من السلسلة وصولاً للـ CA — هذا يحتاج جذور ثقة وهو خارج نطاق الأداة. شريط النتيجة يعرض «تم التحقّق بشهادة x5c من الـ header (السلسلة غير متحقَّق منها)» حتى لا تخلطها بحكم ثقة من البداية للنهاية.
أدوات ذات صلة
- ترميز/فك ترميز Base64 — للترميز الكامن وراءه
- حساب التجزئات — حين تحتاج digest، لا token
- محوّل الطوابع الزمنية — لقراءة
expوiatكتواريخ مفهومة - توقيع JWT — وقّع tokens محلياً
- مقارنة TaskKit بـ jwt.io — مصفوفة الميزات، استدعاءات الشبكة المُقاسة، وادعاءات سلامة وقت التشغيل