परिचय: क्यों OAuth 2.0 और JWT आधुनिक प्राधिकरण का मानक हैं
\n\nआधुनिक वेब डेवलपमेंट में, सुरक्षित प्रमाणीकरण और उपयोगकर्ता प्राधिकरण प्रमुख कार्यों में से एक है। दो सबसे लोकप्रिय प्रोटोकॉल और प्रारूप जो इस कार्य को हल करते हैं, वे हैं OAuth 2.0 और JWT (JSON Web Token)। हालांकि इनका उपयोग अक्सर एक साथ किया जाता है, ये अलग-अलग चीजें हैं: OAuth 2.0 एक एक्सेस डेलिगेशन प्रोटोकॉल है, जबकि JWT एक टोकन प्रारूप है।
\n\nइस लेख में, हम समझेंगे कि OAuth 2.0 कैसे काम करता है, JWT क्या है, और इन्हें JavaScript (Node.js) पर कैसे लागू करें। यह सामग्री शुरुआती डेवलपर्स के लिए है, इसलिए हम सिद्धांत से व्यवहार की ओर बढ़ेंगे, जिसमें स्पष्ट कोड उदाहरण होंगे।
\n\nOAuth 2.0 क्या है और यह कैसे काम करता है
\n\nOAuth 2.0 (Open Authorization) एक प्रोटोकॉल है जो किसी एप्लिकेशन को उपयोगकर्ता का लॉगिन और पासवर्ड दिए बिना उसके संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। कल्पना करें कि आप Google या GitHub के माध्यम से किसी साइट पर लॉग इन करना चाहते हैं - यही OAuth 2.0 है।
\n\nOAuth 2.0 में मुख्य भूमिकाएँ
\n- \n
- Resource Owner — उपयोगकर्ता, जो डेटा का मालिक है \n
- Client — एप्लिकेशन, जो पहुंच का अनुरोध करता है \n
- Authorization Server — सर्वर, जो टोकन जारी करता है (उदाहरण: Google) \n
- Resource Server — सर्वर, जो उपयोगकर्ता का डेटा संग्रहीत करता है \n
Authorization Code Grant प्रवाह (Node.js उदाहरण के साथ)
\nसबसे सामान्य और सुरक्षित OAuth 2.0 प्रवाह Authorization Code Grant है। आइए Express.js का उपयोग करके इसके कार्यान्वयन को देखें।
\n\n// निर्भरताएँ स्थापित करना\n// npm install express axios dotenv\n\n// .env\nCLIENT_ID=your_client_id\nCLIENT_SECRET=your_client_secret\nREDIRECT_URI=http://localhost:3000/callback\n\nconst express = require('express');\nconst axios = require('axios');\nrequire('dotenv').config();\n\nconst app = express();\n\n// चरण 1: उपयोगकर्ता को प्राधिकरण पृष्ठ पर रीडायरेक्ट करना\napp.get('/auth', (req, res) => {\n const authUrl = `https://provider.com/oauth/authorize?client_id=${process.env.CLIENT_ID}&redirect_uri=${process.env.REDIRECT_URI}&response_type=code&scope=email`;\n res.redirect(authUrl);\n});\n\n// चरण 2: authorization code के साथ callback को संभालना\napp.get('/callback', async (req, res) => {\n const { code } = req.query;\n\n try {\n // authorization code को access token से बदलना\n const tokenResponse = await axios.post('https://provider.com/oauth/token', {\n client_id: process.env.CLIENT_ID,\n client_secret: process.env.CLIENT_SECRET,\n code,\n redirect_uri: process.env.REDIRECT_URI,\n grant_type: 'authorization_code'\n });\n\n const { access_token, refresh_token } = tokenResponse.data;\n \n // टोकन सहेजना (वास्तविक प्रोजेक्ट में - डेटाबेस में)\n req.session.accessToken = access_token;\n req.session.refreshToken = refresh_token;\n\n res.send('प्राधिकरण सफल!');\n } catch (error) {\n res.status(500).send('प्राधिकरण त्रुटि');\n }\n});\n\napp.listen(3000, () => console.log('सर्वर पोर्ट 3000 पर शुरू हुआ'));\n\nJWT (JSON Web Token): संरचना और निर्माण
\n\nJWT पक्षों के बीच JSON ऑब्जेक्ट के रूप में जानकारी स्थानांतरित करने का एक कॉम्पैक्ट और स्व-निहित तरीका है। टोकन में तीन भाग होते हैं, जो बिंदुओं से अलग होते हैं:
\n\n- \n
- Header — टोकन का प्रकार और हस्ताक्षर एल्गोरिदम (उदाहरण: HS256) \n
- Payload — डेटा (claims), जिसे हम स्थानांतरित करना चाहते हैं \n
- Signature — हस्ताक्षर, जो डेटा की अखंडता सुनिश्चित करता है \n
Node.js पर JWT बनाना
\nJWT के साथ काम करने के लिए हम jsonwebtoken लाइब्रेरी का उपयोग करेंगे।
// npm install jsonwebtoken\n\nconst jwt = require('jsonwebtoken');\n\nconst secretKey = 'आपकी_गुप्त_कुंजी