حماية APIs باستخدام JWT في PHP

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 23 أبريل 2025

محتوى المقال

حماية APIs باستخدام JWT في PHP

في عالم تطوير الويب، يعتبر تأمين واجهات برمجة التطبيقات (APIs) أمرًا بالغ الأهمية لحماية البيانات ومنع الوصول غير المصرح به. واحدة من أكثر الطرق فعالية لتأمين API هي استخدام JSON Web Tokens (JWT). في هذا المقال، سنتعرف على كيفية استخدام JWT لحماية API في PHP.

ما هو JWT (JSON Web Token)؟

JWT هو معيار مفتوح (RFC 7519) يُستخدم لتمرير بيانات بين طرفين ككائن JSON. يتكون JWT من ثلاثة أجزاء: الرأس (Header)، الحمولة (Payload)، والتوقيع (Signature). يتم تشفير البيانات في JWT باستخدام خوارزمية توقيع رقمية، مما يجعل من الصعب التلاعب بها.

لماذا نستخدم JWT لحماية API؟

JWT يقدم عدة فوائد في تأمين API، منها:

  • التحقق من الهوية: يمكن استخدام JWT للتحقق من هوية المستخدمين دون الحاجة لجلسات (Sessions).
  • التصميم غير المركزي: لا يتطلب JWT تخزين الحالة على الخادم، مما يسمح بتوزيع الخوادم بدون الحاجة لمشاركة الجلسات.
  • مرونة الاستخدام: يمكن استخدام JWT مع مختلف تقنيات وتطبيقات الويب بسهولة.

إعداد بيئة PHP لتطبيق JWT

لبدء استخدام JWT في PHP، ستحتاج إلى مكتبة JWT. واحدة من أشهر المكتبات هي firebase/php-jwt والتي يمكن تثبيتها باستخدام Composer:

composer require firebase/php-jwt

إنشاء JWT في PHP

لإنشاء رمز JWT، يمكنك استخدام المكتبة المثبتة كما يلي:

<?php
use Firebase\JWT\JWT;

// إعداد البيانات
$key = 'secret_key';
$payload = [
   'iss' => 'http://example.org',
   'aud' => 'http://example.com',
   'iat' => time(),
   'nbf' => time()
];

// إنشاء الرمز
$jwt = JWT::encode($payload, $key);
echo $jwt;
?>

في هذا المثال، قمنا بتعريف حمولة (Payload) تحتوي على بعض المعلومات الأساسية مثل iss (المرسل) وaud (المتلقي). يتم توقيع هذه الحمولة باستخدام مفتاح سري لإنشاء JWT.

التحقق من JWT في PHP

للتحقق من صحة JWT، يمكننا استخدام نفس المكتبة للتأكد من أن الرمز صحيح ولم يتم التلاعب به:

<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

// الرمز والمفتاح السري
$jwt = 'your_jwt_token_here';
$key = 'secret_key';

// التحقق من الرمز
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
print_r($decoded);
?>

في هذا المثال، نقوم بفك تشفير الرمز JWT باستخدام المفتاح السري. إذا كان الرمز صالحًا، ستظهر الحمولة المضمنة في JWT.

دمج JWT في API الخاص بك

لحماية نقطة نهاية API باستخدام JWT، يمكنك إنشاء وسيط (Middleware) للتحقق من JWT قبل الوصول إلى نقطة النهاية:

<?php
function authenticate() {
   try {
      // الحصول على الرمز من ترويسة الطلب
      $headers = getallheaders();
      $jwt = $headers['Authorization'];

      // التحقق من صحة الرمز
      $key = 'secret_key';
      JWT::decode($jwt, new Key($key, 'HS256'));
   } catch (Exception $e) {
      http_response_code(401);
      echo 'Access denied.';
      exit();
   }
}

// استدعاء الدالة للتحقق من الرمز قبل الوصول إلى الـAPI
authenticate();
?>

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

تأمين JWT

لتأمين JWT بشكل أكبر، يُنصح بما يلي:

  • استخدام مفاتيح سرية قوية: تأكد من استخدام مفاتيح سرية طويلة ومعقدة.
  • تقليل مدة صلاحية الرمز: قم بتقليل مدة صلاحية JWT لتقليل المخاطر في حال تم تسريب الرمز.
  • تخزين الرموز بأمان: تأكد من تخزين JWT بشكل آمن على الجانب العميل، مثل التخزين المحلي (Local Storage) أو ملفات تعريف الارتباط (Cookies).

الخلاصة

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

طور مهاراتك: مقالات يجب قراءتها في البرمجة