TypeScript में OAuth 2.0 और JWT प्राधिकरण: शुरुआती लोगों के लिए
\n\nआधुनिक वेब एप्लिकेशन शायद ही कभी प्रमाणीकरण और प्राधिकरण तंत्र के बिना काम करते हैं। दो सबसे लोकप्रिय मानक हैं — OAuth 2.0 (पहुँच प्रतिनिधित्व प्रोटोकॉल) और JWT (JSON वेब टोकन, डेटा संचारित करने का एक कॉम्पैक्ट तरीका)। इस लेख में, हम TypeScript में OAuth 2.0 और JWT प्राधिकरण को लागू करने का तरीका समझेंगे, एक सरल लेकिन कार्यशील सर्वर बनाकर। यह सामग्री शुरुआती डेवलपर्स के लिए है जो TypeScript और Node.js की मूल बातों से परिचित हैं।
\n\nOAuth 2.0 और JWT क्या हैं?
\n\nकोड लिखने से पहले, सिद्धांत को समझना महत्वपूर्ण है।
\n\nOAuth 2.0
\nयह एक प्रोटोकॉल है जो उपयोगकर्ता को किसी तीसरे पक्ष के एप्लिकेशन को अपने संसाधनों (जैसे GitHub या Google पर प्रोफ़ाइल) तक सीमित पहुँच प्रदान करने की अनुमति देता है, बिना लॉगिन और पासवर्ड साझा किए। OAuth 2.0 में कई भूमिकाएँ हैं:
\n- \n
- Resource Owner — संसाधन का मालिक (उपयोगकर्ता)। \n
- Client — वह एप्लिकेशन जो पहुँच प्राप्त करना चाहता है। \n
- Authorization Server — वह सर्वर जो सफल प्रमाणीकरण के बाद टोकन जारी करता है। \n
- Resource Server — वह सर्वर जो संरक्षित डेटा संग्रहीत करता है। \n
सबसे सामान्य परिदृश्य "Authorization Code Flow" है, जहाँ उपयोगकर्ता को प्रदाता के पेज पर रीडायरेक्ट किया जाता है, लॉगिन किया जाता है, और फिर सर्वर प्राप्त कोड को टोकन के लिए एक्सचेंज करता है।
\n\nJWT (JSON वेब टोकन)
\nJWT header.payload.signature प्रारूप में एक स्ट्रिंग है, जिसमें डेटा (claims) होता है और इसे एक गुप्त कुंजी से हस्ताक्षरित किया जाता है। इसका उपयोग OAuth 2.0 में Access Token (अल्पकालिक) या Refresh Token (दीर्घकालिक) के रूप में किया जाता है। JWT का लाभ यह है कि यह स्व-निहित है: सर्वर इसे डेटाबेस से संपर्क किए बिना सत्यापित कर सकता है।
प्रोजेक्ट सेटअप और निर्भरताएँ स्थापित करना
\n\nTypeScript पर एक नया प्रोजेक्ट बनाएँ। सुनिश्चित करें कि आपके पास Node.js और npm स्थापित हैं।
\n\nmkdir oauth-jwt-typescript\ncd oauth-jwt-typescript\nnpm init -y\nnpm install express jsonwebtoken dotenv cors cookie-parser\nnpm install -D typescript @types/node @types/express @types/jsonwebtoken @types/cors @types/cookie-parser ts-node nodemon\nnpx tsc --init\n\n\ntsconfig.json फ़ाइल में, "outDir": "./dist" पंक्ति को अनकमेंट करें और "rootDir": "./src" सेट करें। फ़ोल्डर संरचना बनाएँ:
src/\n ├── index.ts\n ├── auth.ts\n ├── middleware.ts\n └── types.ts\n.env\n\n\n.env फ़ाइल में निम्नलिखित निर्दिष्ट करें:
ACCESS_TOKEN_SECRET=your-secret-key-123\nREFRESH_TOKEN_SECRET=your-refresh-secret-456\nPORT=3000\n\n\nOAuth 2.0 और JWT के साथ सर्वर का कार्यान्वयन
\n\n1. सर्वर की मूल संरचना (index.ts)
\nलॉगिन, टोकन प्राप्त करने और संरक्षित एंडपॉइंट के लिए रूट के साथ एक सरल Express सर्वर लिखें।
\n\nimport express from 'express';\nimport cors from 'cors';\nimport cookieParser from 'cookie-parser';\nimport dotenv from 'dotenv';\nimport { login, refresh, logout } from './auth';\nimport { authenticateToken } from './middleware';\n\ndotenv.config();\n\nconst app = express();\napp.use(express.json());\napp.use(cors());\napp.use(cookieParser());\n\n// सार्वजनिक रूट\napp.get('/', (req, res) => {\n res.send('OAuth 2.0 + JWT Server is running');\n});\n\n// प्रमाणीकरण (OAuth 2.0 का अनुकरण)\napp.post('/login', login);\napp.post('/token', refresh); // Access Token का नवीनीकरण\napp.delete('/logout', logout);\n\n// संरक्षित रूट\napp.get('/protected', authenticateToken, (req, res) => {\n res.json({ message: 'पहुँच की अनुमति है', user: (req as any).user });\n});\n\napp.listen(process.env.PORT, () => {\n console.log(`Server running on port ${process.env.PORT}`);\n});\n\n\n2. डेटा प्रकार (types.ts)
\nexport interface TokenPayload {\n userId: number;\n username: string;\n}\n\nexport int