مقدمة عن PyJWT
أصبح JSON Web Token (JWT) المعيار الأساسي في مجال المصادقة والتفويض لواجهات API. يتيح نقل معلومات التحقق بين العميل والخادم بأمان دون الحاجة لتخزين الجلسات على الخادم. من أشهر المكتبات في بايثون للتعامل مع JWT هي PyJWT.
PyJWT هي مكتبة بايثون للتعامل مع رموز JWT، تسهل إنشاء وفك تشفير والتحقق من JWT مع دعم خوارزميات تشفير متعددة. هذا المقال يشرح بالتفصيل كيفية استخدام PyJWT بكفاءة وأمان في مشروعك.
أساسيات JWT (JSON Web Token)
بنية رمز JWT
يتكون JWT من ثلاثة أجزاء مفصولة بنقاط:
header.payload.signature
- Header — يحتوي على نوع الرمز والخوارزمية المستخدمة (مثل HS256)
- Payload — يحتوي على المطالبات (claims)، أي البيانات المفيدة
- Signature — يُستخدم للتحقق من صحة الرمز
مزايا استخدام JWT
- عديم الحالة (Stateless): لا يحتاج الخادم لتخزين الجلسات
- صغير الحجم: يُنقل بسهولة في رؤوس HTTP
- الأمان: دعم تشفير HMAC و RSA
- متعدد المنصات: يعمل على جميع لغات البرمجة
- مكتفي بذاته: يحتوي على جميع المعلومات اللازمة عن المستخدم
مبدأ عمل JWT
يعمل JWT وفق المبدأ التالي:
- يقوم المستخدم بتسجيل الدخول على الخادم
- يولد الخادم رمز JWT يحتوي على معلومات المستخدم
- يحفظ العميل الرمز ويرسله في رأس Authorization
- يتحقق الخادم من توقيع الرمز ويستخرج بيانات المستخدم
تثبيت وإعداد PyJWT
كيفية تثبيت PyJWT
pip install PyJWT
للعمل مع خوارزميات RSA و ECDSA، قم بتثبيت التبعيات الإضافية:
pip install "PyJWT[crypto]"
الاستيراد والإعداد الأولي
import jwt
import datetime
import os
from typing import Dict, Any
تنفذ PyJWT معيار RFC 7519 بالكامل وتوفر واجهة بسيطة لتوليد الرموز والتحقق منها.
وصف تفصيلي لمكتبة PyJWT
التاريخ والتطور
تم إنشاء PyJWT في عام 2013 وهي واحدة من أشهر المكتبات للتعامل مع رموز JWT في بايثون. المكتبة تتطور بنشاط وتدعمها المجتمع، ويتم تحديثها بانتظام لتتوافق مع أحدث معايير الأمان.
هندسة المكتبة
تم بناء PyJWT على بنية معيارية مع فصل واضح للمسؤوليات:
- نواة التشفير/فك التشفير — الوظائف الأساسية للتعامل مع الرموز
- وحدة الخوارزميات — دعم خوارزميات تشفير مختلفة
- وحدة الاستثناءات — معالجة الأخطاء والحالات الاستثنائية
- وحدة الأدوات المساعدة — وظائف مساعدة للتعامل مع الوقت والمفاتيح
الإمكانيات الأساسية
- دعم جميع خوارزميات JWT القياسية
- التحقق التلقائي من صلاحية الرمز
- إمكانية إضافة مطالبات مخصصة
- دعم أنواع مختلفة من المفاتيح (متناظرة وغير متناظرة)
- التكامل مع أطر الويب الشهيرة
إنشاء رموز JWT باستخدام PyJWT
مثال أساسي
payload = {"user_id": 123}
secret = "mysecret"
token = jwt.encode(payload, secret, algorithm="HS256")
print(token)