परिचय: PHP में OAuth 2.0 और JWT की आवश्यकता क्यों है
आधुनिक वेब एप्लिकेशन शायद ही कभी अलग-थलग काम करते हैं। उपयोगकर्ता Google, Facebook या GitHub के माध्यम से एकल साइन-इन की उम्मीद करते हैं, और डेवलपर्स माइक्रोसर्विसेज के बीच सुरक्षित डेटा आदान-प्रदान की उम्मीद करते हैं। दो प्रमुख प्रोटोकॉल - OAuth 2.0 (एक्सेस का प्रतिनिधिमंडल) और JWT (टोकन का कॉम्पैक्ट प्रारूप) - डी-फैक्टो मानक बन गए हैं। इस लेख में, हम चर्चा करेंगे कि PHP पर OAuth 2.0 और JWT प्राधिकरण को शुरू से कैसे लागू किया जाए, केवल भाषा की अंतर्निहित क्षमताओं और लोकप्रिय लाइब्रेरी का उपयोग करके। आपको बाहरी प्रदाताओं के साथ एकीकरण और अपनी स्वयं की प्रमाणीकरण प्रणाली बनाने के लिए तैयार कोड उदाहरण मिलेंगे।
1. OAuth 2.0 की मूल बातें: प्रवाह और भूमिकाएँ
OAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो तृतीय-पक्ष एप्लिकेशन को पासवर्ड स्थानांतरित किए बिना उपयोगकर्ता के संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। इसमें चार भूमिकाएँ शामिल हैं:
- Resource Owner - उपयोगकर्ता, जो डेटा का मालिक है।
- Client - आपका PHP एप्लिकेशन, जो पहुंच का अनुरोध करता है।
- Authorization Server - सर्वर जो टोकन जारी करता है (उदाहरण के लिए, Google)।
- Resource Server - API, जो टोकन के आधार पर डेटा प्रदान करता है।
वेब एप्लिकेशन के लिए सबसे लोकप्रिय प्रवाह Authorization Code Grant है। यह सुरक्षित है क्योंकि टोकन ब्राउज़र के बजाय सर्वर-साइड के माध्यम से प्रेषित होता है। आइए PHP पर कार्यान्वयन पर विचार करें।
1.1. एप्लिकेशन पंजीकरण और Client ID/Secret प्राप्त करना
कोड लिखने से पहले, प्रदाता (उदाहरण के लिए, Google Cloud Console) पर एप्लिकेशन पंजीकृत करें। आपको client_id और client_secret प्राप्त होंगे, और आप redirect URI (उदाहरण के लिए, https://आपकासाइट.ru/callback.php) कॉन्फ़िगर करेंगे।
1.2. PHP पर Authorization Code प्रवाह का कार्यान्वयन
हम दो फ़ाइलें बनाएंगे: login.php (प्राधिकरण सर्वर पर रीडायरेक्ट) और callback.php (प्रतिक्रिया प्रसंस्करण)।
फ़ाइल login.php
<?phpsession_start();
$client_id = 'आपका_CLIENT_ID';$redirect_uri = 'https://आपकासाइट.ru/callback.php';$state = bin2hex(random_bytes(16)); // CSRF से सुरक्षा$_SESSION['oauth_state'] = $state;
$params = http_build_query([ 'client_id' => $client_id, 'redirect_uri' => $redirect_uri, 'response_type' => 'code', 'scope' => 'openid email profile', 'state' => $state,]);
header('Location: https://accounts.google.com/o/oauth2/v2/auth?' . $params);exit;?>फ़ाइल callback.php
<?phpsession_start();
// state की जाँच (CSRF)if ($_GET['state'] !== $_SESSION['oauth_state']) { die('त्रुटि: अमान्य state');}
$client_id = 'आपका_CLIENT_ID';$client_secret = 'आपका_CLIENT_SECRET';$redirect_uri = 'https://आपकासाइट.ru/callback.php';
// कोड को टोकन से बदलना$ch = curl_init('https://oauth2.googleapis.com/token');curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'code' => $_GET['code'], 'client_id' => $client_id, 'client_secret' => $client_secret, 'redirect_uri' => $redirect_uri, 'grant_type' => 'authorization_code',]));curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);curl_close($ch);
$data = json_decode($response, true);$access_token = $data['access_token'] ?? null;
// उपयोगकर्ता प्रोफ़ाइल प्राप्त करना$ch = curl_init('https://www.googleapis.com/oauth2/v2/userinfo');curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $access_token]);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$userInfo = json_decode(curl_exec($ch), true);curl_close($ch);
echo 'नमस्ते, ' . htmlspecialchars($userInfo['email']);?>महत्वपूर्ण: हमेशा state पैरामीटर की जाँच करें। यह अनुरोध जालसाजी (CSRF) से बचाता है।