محلّل JWT

يفكّ ترميز قسمَي الترويسة والحمولة في JSON Web Token من base64url ويعرض المطالبات القياسية بصورة مقروءة. تتم العملية بالكامل في متصفحك — ولا يُرسَل الـ token إلى الخادم. ولا تُتحقَّق صحة التوقيع؛ إذ يتطلّب ذلك مفتاحًا سرّيًا.

آخر تحديث:

الإدخال
الصق token بصيغة header.payload.signature. لا يُرسَل الـ token إلى الخادم.

الـ Token المحلَّل

الترويسة
{ "alg": "HS256", "typ": "JWT" }
الحمولة
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
التوقيع
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

يُعرَض التوقيع بصيغته الخام فقط ولا يُتحقَّق منه. يتطلّب التحقّق من التوقيع مفتاحًا سرّيًا (HMAC) أو مفتاحًا عامًا (RSA/ECDSA).

متى يلزمك هذا المحلّل

عند تتبّع سبب رفض 401

رد «غير مصرّح» لا يشرح نفسه: هل انتهت الصلاحية؟ هل الجمهور aud غير مطابق؟ هل التوقيع تالف؟ فتح الحمولة وقراءة exp وaud وiss يستبعد شُبهتين من ثلاث في ثوانٍ.

عند فحص ما كتبه مزوّد الهوية فعلًا

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

قبل إضافة مطالبات جديدة إلى التوكن

كل مطالبة تُضاف تركب كل طلب لاحق. المثال المحسوب أدناه يحوّل هذا الكلام العام إلى كيلوبايتات ملموسة.

مثال محسوب: كم يكلّف التوكن السمين

خدمة وضعت في الحمولة 12 مطالبة حتى بلغ الـ JSON فيها 800 بايت. لنحسب ما يعنيه ذلك على السلك.

  1. ترميز base64url يضيف الثلث تقريبًا: 800 بايت من JSON تصبح 1067 محرفًا.
  2. تُضاف الترويسة (36 محرفًا) والتوقيع (43 محرفًا لـ HS256) ونقطتا الفصل.
  3. المجموع نحو 1150 بايتًا يركب كل طلب في ترويسة Authorization أو في كوكي.
  4. صفحة تجلب 30 موردًا من النطاق نفسه ترسل التوكن 30 مرة: نحو 34500 بايت صاعدة لكل تحميل.
  5. النطاق الصاعد أضيق من الهابط في معظم الشبكات، فيظهر الأثر أولًا على الجوّال البطيء.

التوكن وسيلة لنقل الهوية لا مخزن للبيانات. أبقِ في الحمولة ما يحتاجه الخادم للتفويض وحده، وضع الباقي خلف نقطة userinfo أو جلسة خادمية. المطالبة «الصغيرة» مضروبة في ملايين الطلبات شهريًا تتحوّل إلى فاتورة نطاق حقيقية.

أربعة أخطاء متكررة

الجمهور aud بين النصّ والمصفوفة

يسمح المعيار بأن تكون قيمة aud نصًّا واحدًا أو مصفوفة نصوص، والمكتبات تختلف في تعاملها مع الحالتين. توكن صُدّر بمصفوفة من قيمتين قد يُرفض عند مدقّق ينتظر نصًّا مفردًا، ويصلك الرفض على هيئة 401 صامت لا خطأ تنسيق. ثبّت الشكل في عقد التكامل، وافحص ما يُصدره المزوّد فعلًا لا ما تفترضه.

إهمال nbf عند إصدار توكنات مستقبلية

توكن يُنشأ الآن لعملية تبدأ لاحقًا يحتاج nbf يحدد بداية صلاحيته؛ وإلا صار صالحًا فور إنشائه. والعكس مؤلم أيضًا: nbf في المستقبل القريب مع ساعة غير متزامنة يجعل التوكن «غير صالح بعد» لثوانٍ محيّرة.

وضع أسرار في الحمولة

الحمولة مقروءة لكل من حمل التوكن؛ فكّها لا يحتاج مفتاحًا، كما تثبت هذه الصفحة نفسها. كلمات المرور والمفاتيح والبيانات الحساسة لا مكان لها هناك؛ وإن لزمت السرّية فالحل JWE لا JWS.

تدوير المفتاح دون معرّف مفتاح

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

أدوات تُستعمل إلى جانبها

  • مُرمّز/مُفكّك Base64 رمّز النص إلى Base64 أو فُكّ ترميزه. متغيّر قياسي وآمن للروابط (base64url)؛ متوافق مع UTF-8، في المتصفح.
  • محوّل Epoch / Unix Timestamp حوّل طوابع Unix epoch الزمنية إلى تواريخ مقروءة والعكس. يُكتشَف وضع الثواني والميلي ثانية تلقائيًا.
  • حاسبة ميزانية موارد Kubernetes احسب عدد العُقد التي تحتاجها وكفاءة التعبئة والتكلفة الشهرية التقديرية بناءً على طلبات الحاوية وحجم العُقدة.
  • مولّد UUID ولّد UUID v4 آمنًا تشفيريًا وv7 المرتّب زمنيًا. توليد دفعي وخيارات تنسيق.
  • حاسبة CIDR / Subnet احسب عنوان الشبكة والبث وقناع الشبكة الفرعية ونطاق المضيفين القابل للاستخدام ونوع العنوان من تدوين CIDR.

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

هل يُرسَل الـ token الذي ألصقه إلى الخادم؟

لا. تتم عملية التحليل بالكامل في متصفحك عبر JavaScript؛ ولا يُرسَل الـ token إلى أي خادم ولا يُخزَّن في أي مكان. وعند إغلاق الصفحة لا يبقى أي أثر.

هل تتحقّق هذه الأداة من توقيع الـ token؟

لا. تفكّ هذه الأداة ترميز قسمَي الترويسة والحمولة فقط. ويتطلّب التحقّق من التوقيع المفتاح السرّي للجهة المُصدِرة (HMAC مثل HS256) أو مفتاحها العام (RS256/ES256)؛ وإعطاء هذا السرّ لأداة ويب غير آمن. تحقّق من التوقيع على الخادم عبر JwtBearer.

هل البيانات داخل الـ JWT مشفّرة؟

لا. base64url ترميز فقط وليس تشفيرًا — يمكن لأي شخص فكّ الحمولة. لا تضع كلمات مرور أو بيانات شخصية أو معلومات سرّية في الـ JWT. وإن لزمت السرّية فاستخدم JWE (JWT المشفّر) أو احتفظ بالبيانات الحسّاسة خارج الـ token.

ماذا تعني المطالبات exp وiat وnbf؟

ثلاثتها من نوع NumericDate: عدد الثواني منذ 1 يناير 1970 UTC. exp هي لحظة انتهاء صلاحية الـ token؛ وiat لحظة إصداره؛ وnbf اللحظة التي يصبح فيها صالحًا. تحوّل هذه الأداة الثلاثة إلى تواريخ مقروءة وتبيّن ما إذا انتهت صلاحية الـ token.

كيف أتحقّق من JWT في .NET؟

أضِف حزمة Microsoft.AspNetCore.Authentication.JwtBearer واضبط AddAuthentication().AddJwtBearer(...) بـ TokenValidationParameters: ValidateIssuer وValidateAudience وValidateLifetime وIssuerSigningKey. يتولّى الـ middleware فحص التوقيع والمُصدِر والمدة نيابةً عنك — لا تفكّ التوقيع يدويًا.