استخدام OAuth 2.0 في PHP API

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

تارخ آخر تحديث: 19 ديسمبر 2024

محتوى المقال

استخدام OAuth 2.0 في PHP API

تعتبر OAuth 2.0 واحدة من أهم البروتوكولات المستخدمة لحماية واجهات برمجة التطبيقات (APIs) وتفويض الوصول إلى الموارد بشكل آمن. في هذا المقال، سنتعرف على كيفية دمج OAuth 2.0 في PHP لتأمين API وإدارة أذونات المستخدمين بكفاءة.

ما هو OAuth 2.0؟

OAuth 2.0 هو بروتوكول تفويض يسمح لتطبيقات الطرف الثالث بالوصول إلى موارد المستخدمين على خادم آخر بطريقة آمنة دون الحاجة إلى مشاركة كلمات المرور. يتم ذلك من خلال تقديم "توكنات وصول" (Access Tokens) بدلاً من كلمات المرور.

لماذا نستخدم OAuth 2.0؟

يوفر OAuth 2.0 العديد من الفوائد عند تأمين API:

  • أمان محسّن: تفويض الوصول عبر توكنات مؤقتة بدلاً من مشاركة بيانات الاعتماد.
  • مرونة: يدعم OAuth 2.0 سيناريوهات متعددة مثل تطبيقات الويب، تطبيقات الجوال، وخدمات السيرفر إلى السيرفر.
  • تجربة مستخدم سلسة: يوفر طريقة للمستخدمين لمنح الأذونات دون الحاجة إلى تسجيل الدخول في كل مرة.

إعداد PHP لاستخدام OAuth 2.0

لبدء استخدام OAuth 2.0 في PHP، سنحتاج إلى مكتبة توفر واجهات التعامل مع OAuth 2.0. واحدة من المكتبات الشائعة هي league/oauth2-server، والتي يمكن تثبيتها عبر Composer:

composer require league/oauth2-server

إعداد خادم OAuth 2.0 في PHP

بعد تثبيت المكتبة، يمكننا إعداد خادم OAuth 2.0 لإدارة التوكنات والأذونات. في هذا المثال، سنقوم بإعداد خادم بسيط يمنح توكنات الوصول باستخدام "grant_type" من نوع "password".

<?php
use League\OAuth2\Server\AuthorizationServer;
use League\OAuth2\Server\Grant\PasswordGrant;
use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface;
use League\OAuth2\Server\Repositories\ClientRepositoryInterface;
use League\OAuth2\Server\Repositories\ScopeRepositoryInterface;

// إعداد المستودعات (Repositories)
$clientRepository = new ClientRepository();
$accessTokenRepository = new AccessTokenRepository();
$scopeRepository = new ScopeRepository();

// إعداد خادم OAuth 2.0
$server = new AuthorizationServer(
   $clientRepository,
   $accessTokenRepository,
   $scopeRepository,
   'file://path/to/private.key',
   'file://path/to/public.key'
);

// إضافة نوع التوكين (grant type)
$grant = new PasswordGrant(
   new UserRepository(),
   new RefreshTokenRepository()
);
$server->enableGrantType($grant, new DateInterval('PT1H'));
?>

في هذا المثال، نقوم بإنشاء خادم OAuth 2.0 مع نوع التوكين "Password Grant". ستحتاج إلى استبدال مسارات المفاتيح الخاصة والعامة بمساراتك الخاصة، وإعداد المستودعات الضرورية (مثل ClientRepository وAccessTokenRepository).

طلب توكن الوصول (Access Token)

للحصول على توكن وصول، يقوم العميل بإرسال طلب POST يحتوي على بيانات الاعتماد إلى نقطة نهاية التوكين. الطلب سيكون مشابهًا لما يلي:

POST /token HTTP/1.1
Host: your-api.com
Content-Type: application/x-www-form-urlencoded

grant_type=password&client_id=your-client-id&client_secret=your-client-secret&username=user@example.com&password=user-password

سيقوم الخادم بالتحقق من بيانات الاعتماد وإصدار توكن وصول صالح يمكن استخدامه للوصول إلى موارد API المحمية.

استخدام توكن الوصول لحماية API

للحماية باستخدام توكن الوصول، يحتاج العميل إلى تضمين التوكين في ترويسة Authorization في الطلبات المرسلة إلى نقاط نهاية API المحمية:

GET /api/resource HTTP/1.1
Host: your-api.com
Authorization: Bearer your-access-token

سيقوم الخادم بالتحقق من صحة التوكين وصلاحيته قبل السماح بالوصول إلى المورد المطلوب.

الخلاصة

يعد OAuth 2.0 بروتوكولًا قويًا ومرنًا لتفويض الوصول وتأمين واجهات برمجة التطبيقات. باستخدام OAuth 2.0 مع PHP، يمكنك ضمان أمان API الخاص بك وتوفير تجربة مستخدم سلسة وآمنة. هذا البروتوكول يساعد في حماية مواردك والتحكم في كيفية ومن يمكنه الوصول إليها.

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