PHP पर OAuth 2.0 और JWT का परिचय
\nआधुनिक वेब एप्लिकेशन पारंपरिक सत्र प्रमाणीकरण से हटकर अधिक लचीले और स्केलेबल समाधानों की ओर बढ़ रहे हैं। दो प्रमुख प्रोटोकॉल — OAuth 2.0 और JWT (JSON Web Tokens) — REST API, मोबाइल एप्लिकेशन और माइक्रोसर्विस आर्किटेक्चर में प्राधिकरण के लिए डी-फैक्टो मानक बन गए हैं। इस लेख में हम व्यावहारिक उदाहरणों के साथ समझेंगे कि आधुनिक लाइब्रेरी और सर्वोत्तम सुरक्षा प्रथाओं का उपयोग करके PHP पर OAuth 2.0 और JWT प्राधिकरण कैसे लागू करें।
\nआप सीखेंगे कि प्राधिकरण सर्वर कैसे सेट करें, JWT टोकन जारी करें और सत्यापित करें, रिफ्रेश-टोकन जारी करने की व्यवस्था करें और अपने API एंडपॉइंट को सुरक्षित करें। सभी कोड उदाहरण आपके प्रोजेक्ट में उपयोग के लिए तैयार हैं।
\n\nOAuth 2.0 प्रोटोकॉल की मूल बातें
\nOAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो एप्लिकेशन को उपयोगकर्ता की साख प्रदान किए बिना उसके संसाधनों तक सीमित पहुँच प्राप्त करने की अनुमति देता है। PHP एप्लिकेशन के संदर्भ में, OAuth 2.0 आमतौर पर अपनी सेवाओं के लिए प्राधिकरण कोड अनुदान (Authorization Code Grant) या पासवर्ड अनुदान (Password Grant) के माध्यम से कार्यान्वित किया जाता है।
\n\nOAuth 2.0 में प्रमुख भूमिकाएँ
\n- \n
- Resource Owner — वह उपयोगकर्ता जो डेटा का मालिक है \n
- Client — वह एप्लिकेशन जो पहुँच का अनुरोध करता है (उदाहरण के लिए, आपका PHP फ्रंटएंड) \n
- Authorization Server — वह सर्वर जो टोकन जारी करता है \n
- Resource Server — वह सर्वर जो संरक्षित संसाधन प्रदान करता है (आपका API) \n
Authorization Code Grant के माध्यम से टोकन प्राप्त करने का प्रवाह
\n- \n
- उपयोगकर्ता प्राधिकरण पृष्ठ पर जाता है \n
- लॉगिन के बाद, उपयोगकर्ता एक अस्थायी कोड के साथ एप्लिकेशन पर वापस रीडायरेक्ट होता है \n
- PHP सर्वर कोड को access_token और refresh_token में बदलता है \n
- API के लिए सभी बाद के अनुरोध हेडर
Authorization: Bearer <access_token>के साथ निष्पादित होते हैं \n
firebase/php-jwt लाइब्रेरी के साथ PHP पर JWT का कार्यान्वयन
\nPHP में JWT के साथ काम करने के लिए हम लोकप्रिय लाइब्रेरी firebase/php-jwt का उपयोग करेंगे। इसे Composer के माध्यम से स्थापित करें:
composer require firebase/php-jwt\n\nJWT टोकन जनरेशन
\nपेलोड (claims) के साथ एक्सेस-टोकन जारी करने के लिए एक फ़ंक्शन बनाएँ:
\n<?php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\nfunction generateAccessToken(int $userId, string $email): string {\n $secretKey = 'your-256-bit-secret-key-here';\n $issuedAt = time();\n $expirationTime = $issuedAt + 3600; // 1 घंटा\n\n $payload = [\n 'iss' => 'pythonlib.ru',\n 'iat' => $issuedAt,\n 'exp' => $expirationTime,\n 'sub' => $userId,\n 'email' => $email,\n 'roles' => ['user']\n ];\n\n return JWT::encode($payload, $secretKey, 'HS256');\n}\n\nJWT टोकन सत्यापन
\nसंरक्षित संसाधन के प्रत्येक अनुरोध पर टोकन की प्रामाणिकता की जाँच:
\n<?php\nfunction validateAccessToken(string $token): ?object {\n $secretKey = 'your-256-bit-secret-key-here';\n try {\n $decoded = JWT::decode($token, new Key($secretKey, 'HS256'));\n return $decoded;\n } catch (\\Exception $e) {\n // टोकन समाप्त हो गया, अमान्य है या हस्ताक्षर मेल नहीं खाता\n return null;\n }\n}\n\nJWT सत्यापन के लिए Middleware
\nएक सरल middleware का उदाहरण जिसे किसी भी फ्रेमवर्क के साथ उपयोग किया जा सकता है:
\n<?php\nfunction authMiddleware(): ?object {\n $headers = getallheaders();\n $authHeader = $headers['Authorization'] ?? '';\n\n if (!preg_match('/Bearer\\s(\\S+)/', $authHeader, $matches)) {\n http_response_code(401);\n echo json_encode(['error' => 'टोकन प्रदान नहीं किया गया']);\n exit;\n }\n\n $token = $matches[1];\n $user = validateAccessToken($token);\n\n if (!$user) {\n http_response_code(401);\n