Node.js में JWT टोकन (JavaScript): jsonwebtoken लाइब्रेरी के लिए संपूर्ण गाइड
JSON वेब टोकन (JWT) JSON-आधारित एक्सेस टोकन बनाने के लिए एक खुला मानक (RFC 7519) है। JWT का व्यापक रूप से क्लाइंट और सर्वर के बीच प्रमाणीकरण और सूचना आदान-प्रदान के लिए उपयोग किया जाता है। Node.js इकोसिस्टम में JWT के साथ काम करने के लिए सबसे लोकप्रिय लाइब्रेरी jsonwebtoken है। इस लेख में, हम विस्तार से जानेंगे कि सुरक्षित वेब एप्लिकेशन बनाने के लिए इस लाइब्रेरी को कैसे स्थापित करें, कॉन्फ़िगर करें और उपयोग करें।
JWT क्या है और इसकी आवश्यकता क्यों है?
JWT एक स्ट्रिंग है जो तीन भागों से बनी होती है, जो डॉट्स द्वारा अलग किए जाते हैं: Header (शीर्षक), Payload (पेलोड) और Signature (हस्ताक्षर)। टोकन इस तरह दिखता है: xxxxx.yyyyy.zzzzz। JWT के मुख्य लाभ:
- सुरक्षा — टोकन पर एक गुप्त कुंजी या कुंजी जोड़ी (RSA/ECDSA) से हस्ताक्षर किया जाता है, जो इसकी अखंडता सुनिश्चित करता है।
- स्व-पर्याप्तता — प्रमाणीकरण सत्यापन के लिए सभी आवश्यक जानकारी टोकन में ही होती है, जिससे डेटाबेस अनुरोधों की संख्या कम हो जाती है।
- क्रॉस-प्लेटफ़ॉर्म — JWT किसी भी प्रोग्रामिंग भाषा और प्लेटफ़ॉर्म के साथ काम करता है।
- लचीलापन — आप पेलोड में कोई भी कस्टम डेटा जोड़ सकते हैं (जैसे, उपयोगकर्ता आईडी, भूमिका)।
jsonwebtoken लाइब्रेरी की स्थापना
Node.js में JWT के साथ काम करने के लिए, npm के माध्यम से jsonwebtoken पैकेज स्थापित करें:
npm install jsonwebtokenस्थापना के बाद, अपनी फ़ाइल में लाइब्रेरी शामिल करें:
const jwt = require('jsonwebtoken');JWT टोकन का जनरेशन (हस्ताक्षर)
टोकन बनाने के लिए jwt.sign(payload, secretOrPrivateKey, options) विधि का उपयोग किया जाता है। आइए एक बुनियादी उदाहरण देखें:
const jwt = require('jsonwebtoken');
const payload = { userId: 123, role: 'user'};
const secretKey = 'my_super_secret_key_123';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h', // टोकन 1 घंटे में समाप्त हो जाएगा algorithm: 'HS256' // हस्ताक्षर एल्गोरिदम (डिफ़ॉल्ट HS256)});
console.log('जनरेट किया गया टोकन:', token);महत्वपूर्ण: गुप्त कुंजी को कभी भी कोड में स्टोर न करें। पर्यावरण चर (.env फ़ाइल) का उपयोग करें। इसके लिए dotenv पैकेज स्थापित करें:
npm install dotenvपर्यावरण चर के साथ उपयोग का उदाहरण:
require('dotenv').config();const jwt = require('jsonwebtoken');
const token = jwt.sign( { userId: 456 }, process.env.JWT_SECRET, { expiresIn: '7d' });JWT टोकन का सत्यापन (वेरिफिकेशन)
टोकन की प्रामाणिकता की जांच करने के लिए jwt.verify(token, secretOrPublicKey, options) विधि का उपयोग किया जाता है। यदि टोकन मान्य है तो यह पेलोड लौटाता है, या यदि टोकन समाप्त हो गया है या अमान्य है तो यह एक त्रुटि फेंकता है।
const token = 'आपका_टोकन_यहाँ';
try { const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log('डिकोड किया गया डेटा:', decoded); // { userId: 456, iat: 1700000000, exp: 1700600000 }} catch (err) { if (err.name === 'TokenExpiredError') { console.log('टोकन समाप्त हो गया'); } else if (err.name === 'JsonWebTokenError') { console.log('अमान्य टोकन'); } else { console.log('सत्यापन त्रुटि:', err.message); }}iat (issued at — निर्माण का समय) और exp (expiration time — समाप्ति का समय) फ़ील्ड पर ध्यान दें, जो स्वचालित रूप से जोड़े जाते हैं यदि expiresIn पैरामीटर निर्दिष्ट किया गया है।
Express.js के लिए Middleware
वास्तविक एप्लिकेशन में, JWT आमतौर पर middleware में सत्यापित किया जाता है। Express.js के लिए एक उदाहरण यहां दिया गया है:
const express = require('express');const jwt = require('jsonwebtoken');require('dotenv').c