JSON Web Tokens (JWTs) هي وسيلة مضغوطة وآمنة على مستوى URL لتمثيل المطالبات التي يتم نقلها بين طرفين. تُستخدم هذه المطالبات غالباً لضمان سلامة وأصالة المعلومات.
تستكشف هذه المقالة كيفية عمل JWTs. سننظر في هيكل JWT، الذي يتكون من ثلاثة أجزاء مشفرة وموقعة رقمياً. سنناقش بعد ذلك حالات الاستخدام الشائعة لـ JWTs ونستعرض بعض الفوائد المرتبطة باستخدامها،
هيكل JWT (مع مثال)
يتكون JSON Web Token (JWT) من ثلاثة أجزاء مفصولة بنقاط: الرأس، الحمولة، والتوقيع. الهيكل العام هو:
xxxxxxxxxx.yyyyyyyyyy.zzzzzzzzzz
الرأس:
- يتكون الرأس عادة من جزئين: نوع الرمز، وهو JWT، وخوارزمية التوقيع المستخدمة، مثل HMAC SHA256 أو RSA.
- مثال على الرأس (مشفر بـ base64):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
الحمولة:
- تحتوي الحمولة على مطالبات. المطالبات هي بيانات حول كيان (عادةً، المستخدم) وبيانات إضافية.
- هناك ثلاثة أنواع من المطالبات: المطالبات المسجلة، العامة، والخاصة.
- مثال على الحمولة (مشفر بـ base64):
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
التوقيع:
- لإنشاء جزء التوقيع، تحتاج إلى أخذ الرأس المشفر، الحمولة المشفرة، سر، والخوارزمية المحددة في الرأس، ثم توقيع ذلك.
- يستخدم التوقيع للتحقق من أن مرسل JWT هو من يقول إنه، ولضمان عدم تغيير الرسالة along the way.
- مثال على التوقيع:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
جمع كل ذلك معاً:
Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Payload: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Signature: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT المشفر:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwia
فوائد استخدام JWT:
تحتوي JWTs على كائنات JSON مشفرة وموقعة، مما يضمن السلامة والأصالة دون الاعتماد على جلسات الحالة على الخادم.
بعض الفوائد الرئيسية التي تجعل JWTs مفيدة هي:
- حجم مضغوط من ترميز JSON الآمن لرابط URL من أجل كفاءة المساحة
- ذاتية-contained مع جميع معلومات المستخدم الضرورية لتجنب الاستعلامات المفرطة إلى قاعدة البيانات
- توقيعات رقمية من أجل أمان مقاوم للتلاعب والتحقق من الأصالة
- طبيعة بلا حالة لتحسين قابلية التوسع من خلال إزالة الجلسات على جانب الخادم
- التوافق العالمي مع محللات JSON المتاحة في معظم اللغات
- قابلية التمديد عبر حقول بيانات مخصصة دون كسر الأطر الموجودة
JWT مقابل OAuth: الفرق بين JWT و OAuth
JWT (JSON Web Token) و OAuth مرتبطتان ولكن تعملان لأغراض مختلفة في سياق المصادقة والتفويض في تطوير الويب. إليك مقارنة موجزة بين JWT و OAuth:
JWT (JSON Web Token):
- الغرض: JWT هي وسيلة مضغوطة ومستقلة لنقل المعلومات بين الأطراف بشكل آمن. تُستخدم عادةً للمصادقة وتبادل المعلومات.
- المحتوى: يحتوي JWT على مطالبات حول كيان (عادةً، مستخدم) وغالباً ما يُستخدم لمصادقة المستخدم. يمكن أن تتضمن المطالبات معرف المستخدم، الأدوار، الأذونات، ومعلومات أخرى ذات صلة. تُستخدم JWTs غالباً لإنشاء أنظمة مصادقة بلا حالة.
- الاستخدام: يتم عادةً إرسال JWTs كجزء من رؤوس الطلبات في طلبات HTTP. تُستخدم لتمثيل الهوية والامتيازات الخاصة بالمستخدم.
OAuth (التفويض المفتوح):
- الغرض: OAuth هو إطار عمل للتفويض، يسمح لتطبيق طرف ثالث بالوصول إلى موارد المستخدم على خادم آخر دون كشف بيانات اعتماد المستخدم. لم يتم تصميم OAuth للمصادقة ولكن للتفويض.
- الأدوار: تحدد OAuth أدوار مثل مالك المورد، العميل، خادم التفويض، وخادم المورد. يسمح بسيناريوهات حيث يمكن للمستخدم منح الوصول إلى موارده (مثل الصور، جهات الاتصال) لتطبيق آخر دون مشاركة بيانات اعتماده.
- أنواع المنح: يقدم OAuth أنواع منح (رمز التفويض، ضمني، بيانات اعتماد العميل، كلمة المرور، إلخ) لتحديد كيفية تنفيذ عملية التفويض.
- الرموز: تتضمن OAuth استخدام رموز الوصول ورموز التحديث. تُستخدم رموز الوصول للوصول إلى الموارد المحمية، ويمكن استخدام رموز التحديث للحصول على رمز وصول جديد.
الاختلافات الرئيسية:
- الغرض: تُستخدم JWT أساسًا للمصادقة وتبادل المعلومات، بينما OAuth هو إطار عمل للتفويض.
- المحتوى: يحتوي JWT على مطالبات حول المستخدم، بينما تركز OAuth على تحديد الأدوار والإذونات وإدارة الوصول إلى الموارد.
- الأدوار: تُستخدم JWT غالبًا لتمثيل هوية المستخدم، بينما تتضمن OAuth أدواراً مثل مالك المورد، العميل، خادم التفويض، وخادم المورد.
- الرموز: JWT هو نوع من الرموز المستخدمة للمصادقة، بينما يقدم OAuth رموز الوصول ورموز التحديث لإدارة التفويض.
كيف يعمل JWT؟
تلعب JSON Web Tokens (JWTs) دورًا رئيسيًا في المصادقة من خلال توفير وسيلة آمنة وفعالة للتحقق من هوية المستخدمين. تتضمن العملية عادةً الخطوات التالية:
- مصداقية المستخدم: يتم تسجيل دخول المستخدمين باستخدام اسم المستخدم وكلمة المرور أو عبر مزودين خارجيين مثل Google أو Facebook. يتحقق خادم المصادقة من بيانات الاعتماد ويصدر JSON Web Token (JWT) يشهد على هوية المستخدم.
- إنشاء JWT: يقوم مزود الهوية (IdP) بإنشاء JWT، موقّعًا إياه إما بملح سري أو بمفتاح خاص. تغلف هذه JWT معلومات أساسية حول المستخدم، مثل معرف المستخدم، الأدوار، ووقت انتهاء الصلاحية.
- استخدام JWT: يحتفظ عميل المستخدم بـ JWT المأخوذة أثناء المصادقة بشكل آمن. عند الوصول إلى الموارد المحمية، يتضمن العميل JWT في رأس التفويض HTTP.
- تحقق من الرمز: يفكك خادم المورد و يتحقق من أصالة JWT باستخدام الملح السري المقدم أو المفتاح العام. تضمن هذه العملية سلامة وأصل الرمز.
JWT في Apidog
Apidog هي أداة تطوير واختبار واجهة برمجة التطبيقات سهلة الاستخدام تتفوق في إدارة JSON Web Tokens (JWT). مع واجهتها السلسة، تبسط Apidog عملية التعامل مع JWTs، مما يوفر دعماً تلقائيًا لإنشاء الرموز، إدارة ديناميكية، وإدماج خالي من المتاعب في طلبات API.

تساعد هذه الأداة في تبسيط جوانب JWT المتعلقة بتطوير API، مما يسمح للمطورين بالتركيز على الاختبار الفعال والتكامل ضمن سير العمل الخاص بهم.