PHP में OAuth 2.0 और JWT का परिचय
\n\nआधुनिक वेब एप्लिकेशन शायद ही कभी प्राधिकरण प्रणालियों के बिना काम करते हैं। दो सबसे लोकप्रिय प्रोटोकॉल — OAuth 2.0 और JWT (JSON Web Token) — डेवलपर्स को सुरक्षित और स्केलेबल समाधान बनाने की अनुमति देते हैं। इस लेख में, हम PHP में OAuth 2.0 और JWT प्राधिकरण को शुरू से लागू करने का तरीका समझेंगे। यह सामग्री शुरुआती लोगों के लिए है, इसलिए सभी अवधारणाओं को सरल भाषा में व्यावहारिक उदाहरणों के साथ समझाया जाएगा।
\n\nOAuth 2.0 एक प्रतिनिधि पहुँच प्रोटोकॉल है। यह उपयोगकर्ताओं को अपना पासवर्ड दिए बिना तीसरे पक्ष को अपने संसाधनों तक सीमित पहुँच प्रदान करने की अनुमति देता है। JWT, बदले में, एक कॉम्पैक्ट टोकन प्रारूप है जिसमें उपयोगकर्ता और उसके अधिकारों के बारे में सभी आवश्यक जानकारी होती है।
\n\nJWT क्या है और यह कैसे काम करता है?
\n\nJWT (JSON Web Token) एक खुला मानक (RFC 7519) है जो पक्षों के बीच JSON ऑब्जेक्ट के रूप में जानकारी स्थानांतरित करने का एक कॉम्पैक्ट और आत्मनिर्भर तरीका परिभाषित करता है। टोकन में तीन भाग होते हैं, जो डॉट्स द्वारा अलग किए जाते हैं:
\n\n- \n
- Header — इसमें टोकन प्रकार और एन्क्रिप्शन एल्गोरिदम (आमतौर पर HS256 या RS256) के बारे में जानकारी होती है। \n
- Payload — इसमें "दावे" (claims) होते हैं: उपयोगकर्ता डेटा, जारी करने का समय (iat), समाप्ति समय (exp) और अन्य। \n
- Signature — हेडर, पेलोड और गुप्त कुंजी के आधार पर बनाया गया हस्ताक्षर। डेटा अखंडता सुनिश्चित करता है। \n
एक सामान्य JWT इस तरह दिखता है:
\n\neyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6ItCQ0L3QsNGC0L7Qu9C40LkiLCJpYXQiOjE1MTYyMzkwMjJ9.4vGJ7qF6b0Q9l8z3X5p2Rk1h7t9y2w4z6x8c0v2b4n6m8\n\nJWT का लाभ यह है कि सर्वर को डेटाबेस में सत्र संग्रहीत करने की आवश्यकता नहीं है — सारी जानकारी पहले से ही टोकन में एन्कोडेड होती है। यह सिस्टम को आसानी से स्केलेबल बनाता है।
\n\nPHP में JWT के साथ काम करने के लिए लाइब्रेरी स्थापित करना
\n\nPHP में JWT के साथ काम करने के लिए, हम लोकप्रिय लाइब्रेरी firebase/php-jwt का उपयोग करेंगे। इसे Composer के माध्यम से स्थापित करें:
composer require firebase/php-jwt\n\nJWT टोकन बनाना और सत्यापित करना
\n\nआइए उपयोगकर्ता लॉगिन पर टोकन बनाने और संरक्षित संसाधन के अनुरोध पर इसकी जाँच करने का एक बुनियादी उदाहरण देखें।
\n\n1. टोकन जनरेशन (login.php):
\n\n<?php\nrequire_once 'vendor/autoload.php';\n\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n$secretKey = 'आपकी-गुप्त-कुंजी-कम-से-कम-32-अक्षर-लंबी';\n\n// सफल प्रमाणीकरण के बाद उपयोगकर्ता डेटा\n$payload = [\n 'iss' => 'pythonlib.ru', // टोकन जारीकर्ता\n 'sub' => $userId, // उपयोगकर्ता आईडी\n 'name' => $userName, // उपयोगकर्ता नाम\n 'role' => 'user', // भूमिका\n 'iat' => time(), // जारी करने का समय\n 'exp' => time() + 3600 // टोकन 1 घंटे में समाप्त हो जाता है\n];\n\n$jwt = JWT::encode($payload, $secretKey, 'HS256');\n\n// क्लाइंट को टोकन भेजें\necho json_encode(['token' => $jwt]);\n?>\n\n2. टोकन सत्यापन (profile.php):
\n\n<?php\nrequire_once 'vendor/autoload.php';\n\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n$secretKey = 'आपकी-गुप्त-कुंजी-कम-से-कम-32-अक्षर-लंबी';\n\n// Authorization हेडर से टोकन प्राप्त करें\n$headers = getallheaders();\n$authHeader = $headers['Authorization'] ?? '';\n\nif (preg_match('/Bearer\\s(\\S+)/', $authHeader, $matches)) {\n $jwt = $matches[1];\n \n try {\n $decoded = JWT::decode($jwt, new Key($secretKey, 'HS256'));\n \n // टोकन मान्य है, उपयोगकर्ता डेटा प्राप्त करें\n $userId = $decoded->sub;\n $userName = $decoded->name;\n \n // संरक्षित डेटा लौटाएं\n echo json_encode(['status' => 'success', 'user' => $decoded]);\n \n } catch (Exception $e) {\n // टोकन अमान्य या समाप्त हो गया है\n htt