عميل OAuth لـ PHP: المصادقة عبر شبكات التواصل الاجتماعي وAPI

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل OAuth لـ PHP: دليل شامل لتكامل المصادقة

\n\n

OAuth (التفويض المفتوح) هو بروتوكول تفويض مفتوح يسمح بمنح طرف ثالث وصولاً محدودًا إلى موارد المستخدم دون نقل اسم المستخدم وكلمة المرور. في عالم PHP، توجد عدة مكتبات لتنفيذ OAuth 2.0، ولكن واحدة من أشهرها وأكثرها دعمًا هي League\\OAuth2-Client (The PHP League). توفر هذه المكتبة طريقة مرنة وآمنة لتكامل تسجيل الدخول عبر Google وFacebook وGitHub وVK (فكونتاكتي) وYandex والعديد من الخدمات الأخرى.

\n\n

في هذه المقالة، سنشرح بالتفصيل تثبيت عميل OAuth لـ PHP وإعداده واستخدامه من خلال مثال المصادقة عبر Google وVK. ستتعلم كيفية الحصول على access token وrefresh token وبيانات ملف المستخدم.

\n\n

تثبيت عميل OAuth عبر Composer

\n\n

للبدء، تحتاج إلى تثبيت المكتبة الأساسية والموفرين (محولات للخدمات المحددة). قم بتنفيذ الأمر التالي في الطرفية:

\n\n
composer require league/oauth2-client\ncomposer require league/oauth2-google\ncomposer require league/oauth2-vk
\n\n

تدعم المكتبة PSR-7 (رسائل HTTP) وPSR-18 (عميل HTTP)، لذا يُوصى أيضًا بتثبيت Guzzle أو أي عميل HTTP متوافق آخر:

\n\n
composer require guzzlehttp/guzzle
\n\n

الهندسة الأساسية لـ OAuth 2.0

\n\n

يعمل OAuth 2.0 في PHP وفقًا للمخطط التالي:

\n
    \n
  • Client ID وClient Secret — تحصل عليهما عند تسجيل التطبيق في الخدمة (Google Cloud Console، VK Developers، إلخ).
  • \n
  • Redirect URI — عنوان URL على موقعك الإلكتروني حيث سيعيد الخدمة توجيه المستخدم بعد المصادقة.
  • \n
  • Authorization Code — رمز مؤقت يتم استبداله بـ access token.
  • \n
  • Access Token — مفتاح للوصول إلى API الخاص بالمستخدم.
  • \n
  • Refresh Token — يسمح بتحديث access token دون إعادة المصادقة.
  • \n
\n\n

مثال: تسجيل الدخول عبر Google

\n\n

لننشئ معالجًا بسيطًا للمصادقة عبر Google. يُفترض أن لديك بالفعل client_id وclient_secret.

\n\n

الخطوة 1. إعادة توجيه المستخدم إلى صفحة مصادقة Google

\n\n
<?php\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n    'clientId'     => 'ВАШ_CLIENT_ID',\n    'clientSecret' => 'ВАШ_CLIENT_SECRET',\n    'redirectUri'  => 'https://ваш-сайт.ru/callback.php',\n]);\n\n// إنشاء URL للمصادقة\n$authUrl = $provider->getAuthorizationUrl([\n    'scope' => ['email', 'profile'], // الأذونات المطلوبة\n]);\n\n// حفظ state في الجلسة للحماية من CSRF\n$_SESSION['oauth2state'] = $provider->getState();\n\nheader('Location: ' . $authUrl);\nexit;
\n\n

الخطوة 2. معالجة callback (callback.php)

\n\n
<?php\nsession_start();\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n    'clientId'     => 'ВАШ_CLIENT_ID',\n    'clientSecret' => 'ВАШ_CLIENT_SECRET',\n    'redirectUri'  => 'https://ваш-сайт.ru/callback.php',\n]);\n\n// التحقق من state لمنع هجمات CSRF\nif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {\n    unset($_SESSION['oauth2state']);\n    exit('Invalid state');\n}\n\ntry {\n    // استبدال authorization code بـ access token\n    $accessToken = $provider->getAccessToken('authorization_code', [\n        'code' => $_GET['code']\n    ]);\n\n    // الحصول على بيانات ملف المستخدم\n    $resourceOwner = $provider->getResourceOwner($accessToken);\n    $user = $resourceOwner->toArray();\n\n    echo "مرحبًا، " . htmlspecialchars($user['name']) . "!";\n    echo "البريد الإلكتروني: " . htmlspecialchars($user['email']);\n    // حفظ الرمز المميز في قاعدة البيانات لـ                    

توصيات