JWT टोकन JavaScript (Node.js) में
JSON Web Token (JWT) एक खुला मानक (RFC 7519) है जो JSON-आधारित एक्सेस टोकन बनाने के लिए उपयोग होता है। JWT का व्यापक रूप से आधुनिक Node.js वेब एप्लिकेशन में क्लाइंट और सर्वर के बीच प्रमाणीकरण और सूचना आदान-प्रदान के लिए उपयोग किया जाता है। इस लेख में हम जानेंगे कि Node.js में लोकप्रिय लाइब्रेरी jsonwebtoken के साथ JWT के साथ कैसे काम करें।
JWT क्या है?
JWT तीन भागों से बना होता है, जो डॉट (.) से अलग होते हैं:
- Header — हेडर, जिसमें टोकन का प्रकार और सिग्नेचर एल्गोरिदम (जैसे HS256 या RS256) होता है।
- Payload — पेलोड, जिसमें डेटा (claims) स्टोर होता है: यूज़र आईडी, भूमिका, टोकन की समय सीमा आदि।
- Signature — सिग्नेचर, जो header, payload और सीक्रेट की के आधार पर बनाया जाता है। सिग्नेचर गारंटी देता है कि टोकन बदला नहीं गया है।
JWT दिखने में ऐसा होता है: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
jsonwebtoken लाइब्रेरी इंस्टॉल करना
Node.js में JWT के साथ काम करने के लिए jsonwebtoken पैकेज का उपयोग किया जाता है। इसे npm के माध्यम से इंस्टॉल करें:
npm install jsonwebtoken
इंस्टॉल करने के बाद, आप लाइब्रेरी को अपने प्रोजेक्ट में इम्पोर्ट कर सकते हैं:
const jwt = require('jsonwebtoken');
JWT टोकन जनरेट करना (साइन करना)
टोकन बनाने के लिए jwt.sign() मेथड का उपयोग करें। यह तीन मुख्य पैरामीटर लेता है:
- payload — एक ऑब्जेक्ट जिसमें वह डेटा होता है जिसे टोकन में एनकोड करना है।
- secretOrPrivateKey — सीक्रेट की (या RSA/ECDSA एल्गोरिदम के लिए प्राइवेट की)।
- options — एक ऑब्जेक्ट जिसमें विकल्प होते हैं, जैसे
expiresInटोकन की समय सीमा सेट करने के लिए।
टोकन जनरेट करने का उदाहरण:
const jwt = require('jsonwebtoken');
const payload = {
userId: 12345,
role: 'user'
};
const secretKey = 'your-secret-key-here';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });
console.log('जनरेट किया गया JWT:', token);
इस उदाहरण में टोकन 1 घंटे के लिए वैध होगा। आप समय को सेकंड (expiresIn: 3600) या अन्य फॉर्मेट में भी सेट कर सकते हैं, जैसे '7d' (7 दिन) या '30m' (30 मिनट)।
JWT टोकन की जांच (वेरिफिकेशन)
टोकन की प्रामाणिकता जांचने के लिए jwt.verify() मेथड का उपयोग करें। यदि टोकन वैध है तो यह डीकोडेड payload लौटाता है, या यदि टोकन समाप्त हो गया है या सिग्नेचर गलत है तो एरर फेंकता है।
const jwt = require('jsonwebtoken');
const token = 'eyJhbGciOiJIUzI1NiIs...'; // आपका टोकन
const secretKey = 'your-secret-key-here';
try {
const decoded = jwt.verify(token, secretKey);
console.log('डीकोडेड डेटा:', decoded);
} catch (err) {
console.error('वेरिफिकेशन एरर:', err.message);
}
यदि टोकन समाप्त हो गया है, तो आपको 'jwt expired' एरर मिलेगा। यदि सिग्नेचर गलत है, तो 'invalid signature' एरर मिलेगा।
सिग्नेचर जांच के बिना डीकोड करना
कभी-कभी आपको सिर्फ टोकन से डेटा पढ़ना होता है बिना सिग्नेचर जांचे (जैसे डीबगिंग के लिए)। इसके लिए jwt.decode() का उपयोग करें:
const jwt = require('jsonwebtoken');
const token = 'eyJhbGciOiJIUzI1NiIs...';
const decoded = jwt.decode(token);
console.log('बिना जांच का Payload:', decoded);
महत्वपूर्ण: jwt.decode() सिग्नेचर की जांच नहीं करता, इसलिए इसे प्रोडक्शन में प्रमाणीकरण के लिए उपयोग न करें।
Express के लिए JWT के साथ Middleware
Express वेब एप्लिकेशन में JWT का उपयोग अक्सर रूट्स को सुरक्षित करने के लिए किया जाता है। आइए एक सरल middleware बनाएं जो Authorization हेडर से टोकन की जांच करता है:
const jwt = require('jsonwebtoken');
funct