في الويب الحديث، أصبح JSON Web Token (JWT) المعيار الفعلي لتأمين واجهات برمجة التطبيقات وإدارة جلسات المستخدم. سواء كنت تستخدم Auth0 أو Firebase أو AWS Cognito.

ولكن بما أن JWTs هي مجرد سلاسل مشفرة بـ Base64Url، فهي غير مفهومة للعين البشرية. لا يمكنك مجرد "قراءتها" لمعرفة ما إذا كان المستخدم لديه دور admin أو إذا انتهت صلاحية الرمز. هذا هو المكان الذي يأتي فيه مفكك وفاحص JWT.

تشريح JWT

رمز JWT ليس مشفراً (Encrypted)؛ إنه مرمز (Encoded) و موقع (Signed). يتكون من ثلاثة أجزاء مفصولة بنقاط (.): الرأس، الحمولة، والتوقيع.

1. الرأس (Header)

يصف كيف تم توقيع الرمز. عادة ما يبدو هكذا:

{"alg": "HS256", "typ": "JWT"}

2. الحمولة (Payload)

تحتوي على البيانات ("المطالبات"). أهم المطالبات:

  • sub: هوية المستخدم.
  • exp: وقت انتهاء الصلاحية (Unix Timestamp).
  • iat: وقت الإصدار.

الأمان: التوقيع مقابل التشفير

مفهوم حاسم: JWTs (عادة) ليست مشفرة. يمكن لأي شخص يعترض الرمز قراءة محتواه.

تحذير

لا تضع أبداً بيانات حساسة مثل كلمات المرور أو أرقام بطاقات الائتمان داخل حمولة JWT.

الخوارزميات: HS256 ض RS256

HS256: متماثل. يستخدم الخادم مفتاحاً سرياً واحداً. أسرع ولكن أقل مرونة.

RS256: غير متماثل. يستخدم مفتاحاً خاصاً للتوقيع ومفتاحاً عاماً للتحقق. أكثر أماناً للأنظمة الموزعة.

تصحيح مشاكل JWT الشائعة

"الرمز منتهي الصلاحية" (Token Expired)

الصق الرمز الخاص بك في أداتنا وانظر إلى مطالبة exp. قارنها بـ "الوقت الحالي".