जावास्क्रिप्ट (Node.js) में प्राधिकरण और प्रमाणीकरण
आधुनिक Node.js वेब डेवलपमेंट में, उपयोगकर्ता डेटा की सुरक्षा और पहुँच नियंत्रण अत्यंत महत्वपूर्ण कार्य हैं। प्रमाणीकरण (पहचान सत्यापन) और प्राधिकरण (अधिकार जाँच) किसी भी सुरक्षित प्रणाली के दो स्तंभ हैं। इस लेख में, हम Node.js प्लेटफॉर्म पर इन तंत्रों को लागू करने के लिए प्रमुख उपकरणों और लाइब्रेरीज़ पर चर्चा करेंगे।
मूल अवधारणाएँ
प्रमाणीकरण — यह सत्यापित करने की प्रक्रिया है कि उपयोगकर्ता वही है जो वह होने का दावा करता है (आमतौर पर लॉगिन/पासवर्ड, टोकन या बायोमेट्रिक्स के माध्यम से)। प्राधिकरण — यह निर्धारित करना है कि प्रमाणित उपयोगकर्ता के लिए कौन सी क्रियाएँ और संसाधन उपलब्ध हैं (भूमिकाएँ, पहुँच अधिकार)।
Node.js के लिए लोकप्रिय लाइब्रेरीज़
1. Passport.js — बहुमुखी प्रमाणीकरण रणनीति
Passport.js Express के लिए सबसे लोकप्रिय middleware लाइब्रेरी है। यह 500 से अधिक रणनीतियों का समर्थन करती है: स्थानीय (लॉगिन/पासवर्ड), OAuth2 (Google, Facebook, GitHub), JWT और कई अन्य।
const passport = require('passport');const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy( function(username, password, done) { User.findOne({ username: username }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'गलत उपयोगकर्ता नाम' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'गलत पासवर्ड' }); } return done(null, user); }); }));
// उपयोगकर्ता का क्रमांकन और अक्रमांकनpassport.serializeUser(function(user, done) { done(null, user.id);});
passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); });});2. JSON Web Tokens (JWT) — सत्र-रहित प्रमाणीकरण
jsonwebtoken लाइब्रेरी JWT टोकन बनाने और सत्यापित करने की अनुमति देती है। यह REST API और SPA अनुप्रयोगों के लिए आदर्श है।
const jwt = require('jsonwebtoken');const secretKey = process.env.JWT_SECRET;
// लॉगिन पर टोकन बनानाconst token = jwt.sign( { userId: user.id, role: user.role }, secretKey, { expiresIn: '24h' });
// टोकन सत्यापन के लिए Middlewarefunction authMiddleware(req, res, next) { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
if (!token) return res.status(401).json({ error: 'टोकन प्रदान नहीं किया गया' });
jwt.verify(token, secretKey, (err, decoded) => { if (err) return res.status(403).json({ error: 'अमान्य टोकन' }); req.user = decoded; next(); });}3. bcrypt — पासवर्ड का सुरक्षित हैशिंग
पासवर्ड को कभी भी सादे टेक्स्ट में न रखें! bcrypt सॉल्ट के साथ हैशिंग के लिए स्वर्ण मानक है।
const bcrypt = require('bcrypt');const saltRounds = 10;
// पंजीकरण के समय पासवर्ड हैश करनाasync function hashPassword(plainPassword) { const salt = await bcrypt.genSalt(saltRounds); const hash = await bcrypt.hash(plainPassword, salt); return hash;}
// लॉगिन के समय पासवर्ड जाँचनाasync function checkPassword(plainPassword, hash) { return await bcrypt.compare(plainPassword, hash);}4. express-session + connect-redis — सत्र प्रबंधन
सर्वर-साइड सत्रों वाले पारंपरिक वेब अनुप्रयोगों के लिए, स्केलिंग के लिए express-session का उपयोग Redis के साथ करें।
const session = require('express-session');const RedisStore = require('connect-redis')(session);
app.use(session({ store: new RedisStore({ client: redisClient }), secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false, cookie: { secure: process.env.NODE_ENV === 'production', // HTTPS httpOnly: true, maxAge: 24 * 60 * 60 * 1000 // 1 दिन }}))