JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড যা নিরাপদে তথ্য আদান-প্রদান করতে ব্যবহৃত হয়। এটি সাধারণত Authentication (অথেন্টিকেশন) এবং Authorization (অথরাইজেশন) এর জন্য ব্যবহৃত হয়। ExpressJS অ্যাপ্লিকেশনে JWT টোকেন জেনারেট এবং যাচাই করার মাধ্যমে ব্যবহারকারীর লগইন সিস্টেম তৈরি করা যায়। এখানে, আমরা দেখব কিভাবে ExpressJS এ JWT টোকেন জেনারেট করা এবং যাচাই করা যায়।
১. JWT টোকেন জেনারেট করার জন্য প্রয়োজনীয় প্যাকেজ ইনস্টল করা
প্রথমে, JWT টোকেন তৈরি এবং যাচাই করার জন্য jsonwebtoken প্যাকেজটি ইনস্টল করতে হবে।
npm install jsonwebtoken
২. JWT টোকেন জেনারেট করা
JWT টোকেন তৈরি করার জন্য, একটি secret key ব্যবহার করা হয় যা টোকেন সাইন করার জন্য ব্যবহৃত হয়। নিচে একটি সিম্পল উদাহরণ দেওয়া হলো কিভাবে টোকেন তৈরি করা হয়:
২.১. JWT টোকেন জেনারেট করার উদাহরণ
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const port = 3000;
// Secret key (এটি নিরাপদে সংরক্ষণ করুন)
const SECRET_KEY = 'yourSecretKey';
// Middleware to parse JSON body
app.use(express.json());
// JWT টোকেন জেনারেট করার রাউট
app.post('/login', (req, res) => {
const { username, password } = req.body;
// এখানে শুধু উদাহরণের জন্য একটি সিম্পল চেক করা হচ্ছে
if (username === 'admin' && password === 'password') {
// ইউজার ভ্যালিড হলে টোকেন জেনারেট করা
const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
res.json({ token });
} else {
res.status(401).send('Invalid credentials');
}
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
এখানে, /login রাউটে POST রিকোয়েস্ট পাঠালে যদি ব্যবহারকারীর username এবং password সঠিক হয়, তাহলে একটি JWT টোকেন জেনারেট করা হবে। টোকেনটি ১ ঘণ্টা সময়ের জন্য বৈধ থাকবে (expiresIn: '1h')।
৩. JWT টোকেন যাচাই করা
JWT টোকেন যাচাই করার জন্য আমরা middleware ব্যবহার করতে পারি। এটি ব্যবহারকারী যেসব রিকোয়েস্ট পাঠাবে, তাদের মধ্যে টোকেনটি যাচাই করবে এবং প্রমাণিত হলে রিকোয়েস্ট চালাতে দিবে।
৩.১. JWT টোকেন যাচাই করার উদাহরণ
// Middleware for JWT verification
function verifyToken(req, res, next) {
// টোকেন হেডারে থাকা উচিত
const token = req.headers['authorization'];
if (!token) {
return res.status(403).send('Token is required');
}
// "Bearer <token>" ফরম্যাটে টোকেন থাকে, তাই "Bearer" অংশটি বাদ দিয়ে টোকেনটি বের করে নেয়া হচ্ছে
const tokenWithoutBearer = token.split(' ')[1];
// JWT টোকেন যাচাই করা
jwt.verify(tokenWithoutBearer, SECRET_KEY, (err, decoded) => {
if (err) {
return res.status(401).send('Invalid token');
}
// টোকেন সঠিক হলে decoded ডেটা `req.user` এ রাখা হবে
req.user = decoded;
next(); // রিকোয়েস্ট পরবর্তী হ্যান্ডলার বা রাউটকে যেতে দিবে
});
}
// Protected route example
app.get('/profile', verifyToken, (req, res) => {
res.json({ message: 'Welcome to your profile', user: req.user });
});
এখানে verifyToken middleware টোকেন যাচাই করে এবং যদি টোকেনটি বৈধ হয়, তাহলে req.user এ decoded তথ্য পাস করা হয়, যা পরবর্তী রাউট হ্যান্ডলারদের জন্য উপলব্ধ হয়। যদি টোকেন বৈধ না হয়, তবে 401 Unauthorized এরর রেসপন্স প্রদান করা হয়।
৪. JWT টোকেনের সাথে Protected Route
একটি protected রাউট তৈরি করতে, যেখানে শুধুমাত্র JWT টোকেন সহকারে প্রবেশ করা যাবে, আপনাকে কেবল verifyToken middleware ব্যবহার করতে হবে।
৪.১. Protected Route উদাহরণ
app.get('/dashboard', verifyToken, (req, res) => {
res.json({
message: 'Welcome to the dashboard',
user: req.user // Decoded user information from token
});
});
এখানে, /dashboard রাউটটি শুধুমাত্র তখনই অ্যাক্সেস করা যাবে যখন সঠিক JWT টোকেন সাথে পাঠানো হবে। যদি টোকেন সঠিক হয়, তবে ড্যাশবোর্ডের ডেটা দেখা যাবে; নতুবা 401 Unauthorized এরর রিটার্ন করা হবে।
৫. JWT টোকেনের সুবিধা ও সুরক্ষা
- Stateless Authentication: JWT-তে কোনো স্টোরেজ প্রয়োজন হয় না, এটি ক্লায়েন্টের সাইটে রাখা হয় এবং সমস্ত ইনফরমেশন টোকেনের মধ্যে সংরক্ষিত থাকে।
- Security: টোকেনটি sign করা থাকে, এবং secret key দিয়ে ভ্যালিডেশন করা হয়, যা এর নিরাপত্তা নিশ্চিত করে।
- Expiry: JWT-তে নির্দিষ্ট সময়ের জন্য বৈধতা থাকে, ফলে নির্দিষ্ট সময় পর টোকেনটি অবৈধ হয়ে যায়, এবং নতুন টোকেন নিতে হবে।
সারাংশ
ExpressJS এ JWT টোকেন জেনারেট এবং যাচাই করার মাধ্যমে আপনি একটি সুরক্ষিত অথেন্টিকেশন সিস্টেম তৈরি করতে পারেন। jsonwebtoken প্যাকেজ ব্যবহার করে JWT টোকেন সহজেই তৈরি এবং যাচাই করা সম্ভব। টোকেন সঠিক হলে, ব্যবহারকারীরা অ্যাপ্লিকেশনের সুরক্ষিত রাউটগুলোতে প্রবেশ করতে পারবে। এর মাধ্যমে আপনি সহজেই একটি RESTful API তৈরি করতে পারবেন যা নিরাপদ এবং কার্যকরী।
Read more