استخدام OAuth 2.0 في PHP API
تمت الكتابة بواسطة: عبد الحكيم
تارخ آخر تحديث: 26 ديسمبر 2024محتوى المقال
- ما هو OAuth 2.0؟
- لماذا نستخدم OAuth 2.0؟
- إعداد PHP لاستخدام OAuth 2.0
- إعداد خادم OAuth 2.0 في PHP
- طلب توكن الوصول (Access Token)
- استخدام توكن الوصول لحماية 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 الخاص بك وتوفير تجربة مستخدم سلسة وآمنة. هذا البروتوكول يساعد في حماية مواردك والتحكم في كيفية ومن يمكنه الوصول إليها.
طور مهاراتك: مقالات يجب قراءتها في البرمجة
- كيفية اختبار APIs باستخدام Postman و PHP
- التعامل مع أخطاء API في PHP
- مقدمة إلى استخدام Composer في PHP
- كيفية تثبيت واستخدام حزم PHP باستخدام Composer
- كيفية إنشاء مكتبات PHP مخصصة
- دليل المبتدئين لتعلم HTML
- ما هي الفرق بين HTML و PHP
- إنشاء نماذج تفاعلية باستخدام PHP و HTML
- فهم هيكل صفحات الويب باستخدام HTML
- كيفية التعامل مع المتغيرات في PHP