فك تشفير JWT

فك تشفير وفحص JSON Web Tokens

جرب مثالاً

رمز JWT

يعمل محليًا · آمن للصق الأسرار
جرب أيضاً:مشفر JWT

ما هو JWT (JSON Web Token)؟

JSON Web Token (JWT) هو تنسيق رمز مضغوط وآمن لعناوين URL، معرَّف في RFC 7519. يُشفِّر مجموعة من المطالبات (claims) كائنَ JSON ثم يوقِّعه — ويشفِّره اختياريًا — حتى يتمكن المستلم من التحقق من أن البيانات لم تُعبَث بها. تُعدّ JWT المعيارَ الفعلي للمصادقة عديمة الحالة في REST API وأنظمة الدخول الموحَّد وتفويض الخدمات المصغَّرة.

تشريح JWT: Header · Payload · Signature

يتكون كل JWT من ثلاثة أجزاء مُشفَّرة بـ base64url تفصل بينها نقاط. Header وPayload عبارة عن JSON عادي — يمكن لأي شخص قراءته — بينما Signature قيمة تشفيرية لا يمكن التحقق منها إلا بالمفتاح الصحيح.

الرمز المُشفَّر

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkFsaWNlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzE3MjAwMDAwLCJleHAiOjE3MTcyMDM2MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

HeaderPayloadSignature
Header
json
{
  "alg": "HS256",
  "typ": "JWT"
}
Payload
json
{
  "sub":  "user123",
  "name": "Alice",
  "role": "admin",
  "iat":  1717200000,
  "exp":  1717203600
}

لماذا تستخدم مُفكِّك JWT؟

تبدو JWT الخام كنص عشوائي. تعرض هذه الأداة Header وPayload فورًا بتنسيق JSON مرتَّب، مما يتيح لك فحص المطالبات والتحقق من أوقات انتهاء الصلاحية ومراجعة اختيارات الخوارزمية دون كتابة سطر واحد من التعليمات البرمجية.

🔍
فحص المطالبات فوريًا
اطَّلع على كل مطالبة في Payload — sub وiss وaud وexp والأدوار المخصصة والأذونات — منسَّقةً وقابلةً للقراءة بنقرة واحدة.
🔓
لا حاجة إلى المفتاح السري
Header وPayload عامَّان؛ Signature وحدها تحتاج إلى السر. تفكِّك هذه الأداة الاثنين دون مفتاح التوقيع.
⏱️
تحليل أوقات الانتهاء والطوابع الزمنية
تُحوَّل طوابع Unix الزمنية (exp وiat وnbf) تلقائيًا إلى تواريخ مقروءة حتى تتمكن على الفور من معرفة ما إذا كان الرمز قد انتهت صلاحيته.
🔒
يعمل بالكامل في متصفحك
تُعالَج جميع البيانات محليًا — لا تُرسَل أي بيانات رمز إلى أي خادم. آمن للاستخدام مع رموز الإنتاج أثناء التصحيح.

مرجع المطالبات القياسية لـ JWT

يُعرِّف RFC 7519 سبعة أسماء مطالبات مسجَّلة. ليست إلزامية، لكن استخدامها موصى به بشدة لضمان التشغيل البيني. يمكنك إضافة أي مطالبات مخصصة إلى Payload.

المطالبةالوصفالنوع
issالمُصدِريُعرِّف من أصدر الرمز — مثل عنوان URL لخادم المصادقة أو اسم التطبيق.string
subالموضوعيُعرِّف الكيان الذي يتعلق به JWT — عادةً معرِّف مستخدم أو حساب خدمة.string
audالجمهوريُعرِّف المستلمين المقصودين. يجب على الطرف المستلم التحقق من أن هذا يطابق معرِّفه.string | string[]
expوقت الانتهاءطابع Unix الزمني الذي لا يُقبَل الرمز بعده. احرص دائمًا على تعيينه للحد من الضرر الناجم عن سرقة الرمز.number
nbfليس قبلطابع Unix الزمني الذي لا يُقبَل الرمز قبله. مفيد لجدولة رموز ذات تاريخ مستقبلي.number
iatأُصدِر فيطابع Unix الزمني الذي أُصدِر فيه الرمز. يُستخدَم لحساب عمر الرمز.number
jtiJWT IDمعرِّف فريد للرمز. يُتيح الإلغاء عبر تخزين قيم JTI المستخدَمة والتحقق منها من جانب الخادم.string

خوارزميات توقيع JWT

يُعلن مطالبة الرأس alg عن الخوارزمية التي وقَّعت الرمز. يؤثر الاختيار على الأمان والأداء وقدرة الخدمات الخارجية على التحقق من الرموز دون المفتاح الخاص.

الخوارزميةالعائلةنوع المفتاحملاحظات
HS256HMACSymmetricالأكثر شيوعًا. سر مشترك — يمكن لأي شخص لديه السر التوقيع والتحقق.
HS384HMACSymmetricنوع HMAC أقوى؛ تكلفة أداء معتدلة.
HS512HMACSymmetricالنوع الأقوى من HMAC.
RS256RSAAsymmetricالخوارزمية غير المتماثلة الأوسع استخدامًا (Google وAuth0 وOkta). يتحقق المفتاح العام دون المفتاح الخاص.
RS384RSAAsymmetricنوع RS بأمان أعلى.
RS512RSAAsymmetricالنوع الأقوى من RS.
ES256ECDSAAsymmetricمنحنى بيضاوي — توقيعات أقصر من RSA، شائع على الجوال وIoT.
PS256RSA-PSSAsymmetricRSA-PSS: أكثر حداثةً وأمانًا من RS256 القائم على PKCS1v1.5.
noneبلا توقيع — خطير للغاية. لا تقبل أبدًا رموزًا بـ alg: none في بيئة الإنتاج.

اعتبارات الأمان

فك تشفير JWT آمن دائمًا. أما الثقة بـ JWT دون التحقق السليم من التوقيع فليست كذلك. ضع هذه القواعد في اعتبارك في كل مرة تستخدم فيها الرموز في تطبيقك.

آمن دائمًا
  • فك تشفير JWT وفحصه في أدوات المطوِّر أو هذه الأداة
  • استخدام exp وiat وnbf لفهم عمر الرمز
  • تسجيل مطالبات Payload لأغراض التصحيح (مع إغفال البيانات الشخصية الحساسة)
  • قراءة رأس alg لفهم كيفية توقيع الرمز
لا تفعل هذا أبدًا
  • الوثوق بمطالبات Payload دون التحقق من التوقيع من جانب الخادم
  • قبول رموز بـ alg: none — يعني ذلك عدم وجود توقيع على الإطلاق
  • تخزين رموز الوصول في localStorage في تطبيقات عالية الأمان (يُفضَّل استخدام ملفات تعريف الارتباط httpOnly)
  • تعيين exp بعيدًا في المستقبل لرموز تحمل أذونات حساسة

حالات الاستخدام الشائعة

تصحيح تدفقات المصادقة
الصق رمزًا من علامة تبويب الشبكة في متصفحك لفحص المطالبات والتحقق من الأدوار المضمَّنة وتأكيد انتهاء الصلاحية دون لمس كود الإنتاج.
فحص رموز الجهات الخارجية
اقرأ بسرعة الرموز من Google وAuth0 وOkta أو Azure AD لمعرفة المطالبات التي يتضمنها موفِّرك ومقارنتها بالمخطط المتوقع.
تطوير API واختباره
عند كتابة نقاط نهاية API أو اختبارها، افك تشفير رأس التفويض للتأكد من أن منطق توليد الرموز يضبط قيمًا صحيحة لـ sub وaud وscope.
تفويض الخدمات المصغَّرة
في شبكات الخدمات، تتحقق كل خدمة من JWT المُرسَل من المُستدعي الأعلى. افك تشفير الرموز لتتبع أي خدمة أصدرت الرمز وما هي الأذونات التي تؤكدها.
الدعم والاستجابة للحوادث
حين يُبلِّغ مستخدم عن خطأ في المصادقة، افك تشفير رمزه للتحقق من انتهاء صلاحيته أو خطأ الجمهور أو غياب مطالبة مطلوبة.
التدقيق الأمني
دقِّق في استخدام JWT عبر الخدمات عبر فحص اختيارات الخوارزمية ونوافذ انتهاء الصلاحية ومدى تخزين البيانات الحساسة عن طريق الخطأ في Payload غير المشفَّر.

فك تشفير JWT في الكود

Header وPayload مُشفَّران بـ base64url — ما عليك سوى عكس التشفير. يستبدل base64url + بـ - و/ بـ _، ويُغفل حشو =. Signature وحدها تحتاج إلى المفتاح السري.

JavaScript (browser)
function decodeJWT(token) {
  const [, payload] = token.split('.')
  const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'))
  return JSON.parse(json)
}
Node.js
const [, payload] = token.split('.')
const decoded = JSON.parse(
  Buffer.from(payload, 'base64url').toString()
)
Python
import base64, json

def decode_jwt(token):
    payload = token.split('.')[1]
    padding = '=' * (-len(payload) % 4)
    return json.loads(base64.urlsafe_b64decode(payload + padding))
CLI (bash + jq)
TOKEN="eyJhbGc..."
echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .

الأسئلة المتكررة

هل يمكنني فك تشفير JWT دون المفتاح السري؟
نعم. Header وPayload في JWT مجرد JSON مُشفَّر بـ base64url — وليس مُعمَّى. يمكن لأي شخص فك تشفيره وقراءته. السر (أو المفتاح الخاص لخوارزميات RS/ES) ضروري فقط للتحقق من التوقيع والتأكد من عدم التلاعب بالرمز.
هل يعني فك تشفير JWT أن التوقيع تم التحقق منه؟
لا. يقرأ فك التشفير المطالبات فحسب. التحقق خطوة منفصلة تفحص التوقيع التشفيري بالمفتاح الصحيح. تحقق دائمًا من التوقيع قبل الوثوق بأي مطالبة في تطبيقك.
ما الفرق بين HS256 وRS256؟
يستخدم HS256 سرًا متماثلًا واحدًا مشتركًا بين المُصدِر والمُحقِّق — يمكن لأي شخص لديه السر إنشاء الرموز والتحقق منها. أما RS256 فيستخدم زوجًا من المفاتيح غير المتماثلة: يوقِّع المفتاح الخاص ويتحقق المفتاح العام. مع RS256 يمكنك توزيع المفتاح العام ليتمكن الخدمات الخارجية من التحقق من الرموز دون القدرة على تزييفها.
لماذا يفشل فك تشفير base64 أحيانًا؟
تستخدم JWT تشفير base64url الذي يستبدل + بـ - و/ بـ _، ويُغفل أحرف الحشو =. تتطلب مُفكِّكات base64 القياسية + و/ وقد تحتاج إلى حشو. أضف الحشو (إلى مضاعف 4 بـ =) وأبدِل الأحرف قبل فك التشفير يدويًا.
هل من الآمن لصق JWT من بيئة الإنتاج في هذه الأداة؟
نعم — تعمل هذه الأداة بالكامل في متصفحك ولا ترسل أي بيانات إلى أي خادم. ومع ذلك، انتبه لمن يمكنه رؤية شاشتك أو سجل تصفحك. للرموز البالغة الحساسية، فكِّها محليًا في طرفيتك.
ماذا يعني alg: none وهل هو خطير؟
alg: none يعني أن الرمز لا يحمل توقيعًا تشفيريًا — يمكن لأي شخص صياغة رمز بمطالبات اعتباطية وتعيين alg إلى none. قبِلت بعض مكتبات JWT المبكرة هذه الرموز مما أوجد ثغرة أمنية حرجة. تُرفض الرموز ذات alg: none دائمًا في المكتبات الآمنة ما لم تُضبَط على خلاف ذلك صراحةً. لا تُعطِّل هذا الفحص أبدًا.