OAuth 2.0 और JWT प्राधिकरण TypeScript पर: पूर्ण गाइड
आधुनिक वेब एप्लिकेशन और API को प्रमाणीकरण और प्राधिकरण के विश्वसनीय तंत्र की आवश्यकता होती है। दो सबसे लोकप्रिय मानक — OAuth 2.0 और JWT (JSON Web Tokens) — अक्सर सुरक्षित और स्केलेबल सिस्टम बनाने के लिए एक साथ उपयोग किए जाते हैं। इस लेख में, हम Express.js और लोकप्रिय लाइब्रेरी का उपयोग करके TypeScript पर OAuth 2.0 और JWT प्राधिकरण को लागू करने का तरीका समझेंगे।
OAuth 2.0 और JWT क्या हैं?
OAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो एप्लिकेशन को उपयोगकर्ता की क्रेडेंशियल्स प्रेषित किए बिना उसके संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। इसका व्यापक रूप से सोशल नेटवर्क (Google, GitHub, Facebook) के माध्यम से लॉगिन के लिए उपयोग किया जाता है।
JWT (JSON Web Token) एक कॉम्पैक्ट और स्व-निहित टोकन है जिसमें उपयोगकर्ता के बारे में जानकारी होती है और इसे डेटाबेस तक पहुंच के बिना सत्यापित किया जा सकता है। JWT का उपयोग अक्सर OAuth 2.0 में access-टोकन के प्रारूप के रूप में किया जाता है।
एक साथ, वे एक शक्तिशाली तंत्र बनाते हैं: OAuth 2.0 टोकन जारी करने की प्रक्रिया का प्रबंधन करता है, जबकि JWT उनके सुरक्षित स्थानांतरण और सत्यापन सुनिश्चित करता है।
प्रोजेक्ट सेटअप और निर्भरताएँ स्थापित करना
TypeScript पर एक नया प्रोजेक्ट बनाएँ। सुनिश्चित करें कि आपके पास Node.js (संस्करण 18+) स्थापित है।
mkdir oauth-jwt-typescriptcd oauth-jwt-typescriptnpm init -yआवश्यक निर्भरताएँ स्थापित करें:
npm install express jsonwebtoken passport passport-google-oauth20 dotenv bcryptjsnpm install -D typescript @types/express @types/jsonwebtoken @types/passport @types/passport-google-oauth20 @types/bcryptjs ts-node nodemontsconfig.json फ़ाइल बनाएँ:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "outDir": "./dist" }, "include": ["src/**/*"]}प्रोजेक्ट संरचना:
src/ ├── config/ │ └── passport.ts ├── controllers/ │ └── authController.ts ├── middleware/ │ └── authMiddleware.ts ├── models/ │ └── user.ts ├── routes/ │ └── authRoutes.ts ├── services/ │ └── jwtService.ts └── app.tsJWT प्राधिकरण का कार्यान्वयन
JWT टोकन तीन भागों से मिलकर बने होते हैं: हेडर (header), पेलोड (payload) और हस्ताक्षर (signature)। TypeScript पर बुनियादी कार्यान्वयन देखें।
JWT के साथ काम करने के लिए एक सेवा बनाएँ (src/services/jwtService.ts):
import jwt from 'jsonwebtoken';import dotenv from 'dotenv';
dotenv.config();
const ACCESS_SECRET = process.env.JWT_ACCESS_SECRET || 'access-secret-key';const REFRESH_SECRET = process.env.JWT_REFRESH_SECRET || 'refresh-secret-key';
export interface TokenPayload { userId: string; email: string; role: string;}
export const generateAccessToken = (payload: TokenPayload): string => { return jwt.sign(payload, ACCESS_SECRET, { expiresIn: '15m' });};
export const generateRefreshToken = (payload: TokenPayload): string => { return jwt.sign(payload, REFRESH_SECRET, { expiresIn: '7d' });};
export const verifyAccessToken = (token: string): TokenPayload => { return jwt.verify(token, ACCESS_SECRET) as TokenPayload;};
export const verifyRefreshToken = (token: string): TokenPayload => { return jwt.verify(token, REFRESH_SECRET) as TokenPayload;};JWT सत्यापन के लिए middleware बनाएँ (src/middleware/authMiddleware.ts):
import { Request, Response, NextFunction } from 'express';import { verifyAccessToken } from '../services/jwtService';
export interface AuthRequest extends Request { user?: { userId: string; email: string; role: string; };}
export const authenticateJWT = (req: AuthRequest, res: Response, next: NextFunction): void => { const authHea