TypeScript में OAuth 2.0 और JWT का परिचय
\n\nआधुनिक वेब डेवलपमेंट में, उपयोगकर्ताओं की सुरक्षित प्राधिकरण किसी भी एप्लिकेशन की नींव है। दो सबसे लोकप्रिय मानक — OAuth 2.0 और JWT (JSON Web Token) — एक मजबूत प्रमाणीकरण और पहुँच नियंत्रण प्रणाली को लागू करने में सक्षम बनाते हैं। इस लेख में, हम इन तकनीकों को TypeScript में जोड़कर शुरू से एक सुरक्षित API बनाने का तरीका समझेंगे।
\n\nयह लेख उन शुरुआती डेवलपर्स के लिए है जो TypeScript की मूल बातों से परिचित हैं और व्यवहार में प्राधिकरण कैसे काम करता है, यह समझना चाहते हैं। हम जटिल सैद्धांतिक व्याख्याओं में नहीं जाएंगे, बल्कि विशिष्ट कोड उदाहरणों पर ध्यान केंद्रित करेंगे।
\n\nOAuth 2.0 क्या है?
\nOAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो तीसरे पक्ष के एप्लिकेशन को उपयोगकर्ता का पासवर्ड दिए बिना उसके संसाधनों तक सीमित पहुँच प्राप्त करने की अनुमति देता है। कल्पना करें कि आप Google के माध्यम से किसी साइट पर लॉगिन करना चाहते हैं: आप साइट को अपना Google पासवर्ड नहीं देते, बल्कि केवल अपना ईमेल और नाम प्राप्त करने की अनुमति देते हैं। यही OAuth 2.0 है।
\n\nJWT क्या है?
\nJWT (JSON Web Token) एक कॉम्पैक्ट और स्व-निहित टोकन प्रारूप है जिसमें उपयोगकर्ता के बारे में सभी आवश्यक जानकारी एन्क्रिप्टेड रूप में होती है। टोकन तीन भागों से बना होता है: हेडर, पेलोड और हस्ताक्षर। हस्ताक्षर के कारण, सर्वर सुनिश्चित हो सकता है कि टोकन के साथ छेड़छाड़ नहीं की गई है।
\n\n1. प्रोजेक्ट सेटअप और डिपेंडेंसी इंस्टॉलेशन
\n\nसबसे पहले, TypeScript पर एक नया प्रोजेक्ट बनाएं। टर्मिनल खोलें और निम्नलिखित कमांड चलाएँ:
\n\nmkdir oauth-jwt-ts\ncd oauth-jwt-ts\nnpm init -y\nnpm install express jsonwebtoken bcrypt dotenv cors\nnpm install -D typescript ts-node @types/express @types/jsonwebtoken @types/bcrypt @types/cors @types/node nodemon\n\nबेसिक कॉन्फ़िगरेशन के साथ tsconfig.json फ़ाइल बनाएँ:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true,\n "forceConsistentCasingInFileNames": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules"]\n}\n\nफ़ोल्डर संरचना इस प्रकार होगी:
\n- \n
src/— स्रोत कोड \n src/controllers/— कंट्रोलर \n src/middleware/— टोकन जाँच के लिए मिडलवेयर \n src/models/— डेटा मॉडल \n src/routes/— रूट्स \n .env— एनवायरनमेंट वेरिएबल्स \n
2. JWT के साथ बेसिक प्रमाणीकरण का कार्यान्वयन
\n\nJWT का उपयोग करके एक सरल रजिस्ट्रेशन और लॉगिन मैकेनिज्म बनाकर शुरू करते हैं। कॉन्स्टेंट स्टोर करने के लिए src/config.ts फ़ाइल बनाएँ:
import dotenv from 'dotenv';\ndotenv.config();\n\nexport const config = {\n jwtSecret: process.env.JWT_SECRET || 'your-secret-key',\n jwtExpiresIn: process.env.JWT_EXPIRES_IN || '15m',\n refreshTokenExpiresIn: process.env.REFRESH_TOKEN_EXPIRES_IN || '7d',\n port: process.env.PORT || 3000\n};\n\nअब JWT टोकन की जाँच के लिए मिडलवेयर बनाएँ। फ़ाइल src/middleware/auth.middleware.ts:
import { Request, Response, NextFunction } from 'express';\nimport jwt from 'jsonwebtoken';\nimport { config } from '../config';\n\nexport interface AuthRequest extends Request {\n user?: { userId: string; email: string };\n}\n\nexport const authenticateToken = (req: AuthRequest, res: Response, next: NextFunction) => {\n const authHeader = req.headers['authorization'];\n const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN\n\n if (!token) {\n return res.status(401).json({ message: 'टोकन प्रदान नहीं किया गया' });\n }\n\n try {\n const decoded = jwt.verify(token, config.jwtSecret) as { userId: string; email: string };\n req.user = decoded;\n next