JWT (JSON Web Token) এর ভূমিকা
JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা ব্যবহারকারীর পরিচয় প্রমাণীকরণ এবং তথ্য নিরাপদে এক্সচেঞ্জ করার জন্য ব্যবহৃত হয়। এটি একটি কনটেইনার যা ডেটা এনকোড করে এবং নিরাপদভাবে বিভিন্ন সার্ভিস বা ক্লায়েন্টের মধ্যে প্রেরণ করা যায়। এটি মূলত RESTful Web Services-এ authentication এবং authorization ব্যবস্থার জন্য ব্যবহৃত হয়।
JWT তিনটি অংশে বিভক্ত:
- Header: এটি সাধারণত টোকেনের ধরণ এবং সিগনেচার অ্যালগরিদম (যেমন HMAC SHA256 বা RSA) নির্দেশ করে।
- Payload: এটি মূল তথ্য ধারণ করে যা আপনি সার্ভিসে পাঠাতে চান (যেমন ব্যবহারকারীর নাম, ইমেইল, অ্যাক্সেস অধিকার ইত্যাদি)।
- Signature: এটি একটি নিরাপদ সিগনেচার, যা টোকেনের সার্বিক নিরাপত্তা নিশ্চিত করে এবং এটি যে ইস্যু করেছেন তা প্রমাণ করে।
JWT সাধারণত Bearer Token হিসেবে HTTP হেডারে পাঠানো হয় এবং API-র মাধ্যমে নিরাপদ যোগাযোগ নিশ্চিত করা হয়।
JWT এর মাধ্যমে Secure Communication
JWT এর মাধ্যমে নিরাপদ যোগাযোগ প্রতিষ্ঠা করা কয়েকটি ধাপে করা যায়:
- ব্যবহারকারী লগইন করা:
- প্রথমে, ব্যবহারকারী একটি সঠিক ব্যবহারকারীর নাম এবং পাসওয়ার্ড দিয়ে লগইন করে।
- সার্ভার ব্যবহারকারীকে যাচাই করে এবং JWT তৈরি করে।
- JWT ইস্যু করা:
- সার্ভার একটি JWT তৈরি করে এবং সেটি ব্যবহারকারীকে ফেরত পাঠায়।
- এই টোকেনের মধ্যে প্রমাণীকৃত ব্যবহারকারীর তথ্য থাকে, যাকে "Payload" বলা হয়।
- JWT পাঠানো:
- ব্যবহারকারী তার পরবর্তী API রিকোয়েস্টে সেই JWT টোকেনটি HTTP হেডারে পাঠায়।
- সার্ভার এই টোকেন যাচাই করে এবং প্রয়োজনীয় তথ্য প্রদান করে, যেমন অ্যাক্সেস অনুমোদন।
- JWT যাচাই করা:
- সার্ভার JWT যাচাই করে, এটি সত্যি কিনা এবং তার মেয়াদ উত্তীর্ণ হয়নি কি না তা চেক করে।
- টোকেন সঠিক হলে সার্ভার প্রয়োজনীয় রেসপন্স প্রদান করে, অন্যথায় ত্রুটি পাঠায়।
JWT ব্যবহার করার সুবিধাসমূহ
- Stateless: JWT-র মাধ্যমে সার্ভারে কোনো স্টেট রাখার প্রয়োজন হয় না, কারণ সমস্ত তথ্য টোকেনে সন্নিবেশিত থাকে। এটি একটি "stateless" প্রমাণীকরণ ব্যবস্থার সুবিধা প্রদান করে।
- Cross-Domain Authentication: JWT ব্যবহার করে একাধিক ডোমেইনে অথবা সার্ভিসে একযোগে প্রমাণীকরণ করা যায়, যা একাধিক অ্যাপ্লিকেশন বা সার্ভিসের মধ্যে সুরক্ষিত যোগাযোগ প্রতিষ্ঠা করতে সহায়তা করে।
- Scalable: JWT স্টেটলেস হওয়ায় সিস্টেমটি সহজে স্কেল করা যায়, কারণ সার্ভারে কোনো সেশন সংরক্ষণ করার প্রয়োজন নেই।
- Security: JWT সিগনেচার ব্যবহার করে এর মধ্যে থাকা তথ্য নিরাপদ থাকে। এটি হ্যাকারদের জন্য সহজে মিথ্যা টোকেন তৈরি করা কঠিন করে তোলে।
JWT এর মাধ্যমে Secure Communication Setup
নিচে Node.js এবং Express.js ব্যবহার করে একটি সহজ JWT Authentication সেটআপ দেখানো হলো:
১. Node.js এবং Express.js সেটআপ করা
প্রথমে, Node.js এবং Express.js প্রোজেক্ট ইনস্টল করতে হবে:
mkdir jwt-example
cd jwt-example
npm init -y
npm install express jsonwebtoken bcryptjs body-parser
২. JWT টোকেন তৈরি এবং যাচাই
const express = require('express');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.use(bodyParser.json());
const SECRET_KEY = 'your-secret-key';
// Mock user data
const users = [
{ id: 1, username: 'testuser', password: '$2a$10$Xj9n6kLQ3o2/TLRI/1dfMOqbc2AXQXGZpMHk1z8iUEa6q2RP/gh6q' } // password is 'password123'
];
// Login Route
app.post('/login', (req, res) => {
const { username, password } = req.body;
const user = users.find(user => user.username === username);
if (!user) {
return res.status(400).send('User not found');
}
// Check password
bcrypt.compare(password, user.password, (err, result) => {
if (err || !result) {
return res.status(400).send('Invalid credentials');
}
// Generate JWT token
const token = jwt.sign({ userId: user.id, username: user.username }, SECRET_KEY, { expiresIn: '1h' });
return res.json({ token });
});
});
// Protected Route
app.get('/protected', (req, res) => {
const token = req.headers['authorization']?.split(' ')[1];
if (!token) {
return res.status(403).send('Token required');
}
jwt.verify(token, SECRET_KEY, (err, decoded) => {
if (err) {
return res.status(401).send('Unauthorized');
}
res.json({ message: 'Welcome to the protected route', user: decoded });
});
});
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
৩. ব্যবহারকারী লগইন এবং JWT প্রাপ্তি
এখন, আপনি /login রুটে POST রিকোয়েস্ট পাঠালে ব্যবহারকারী যদি সঠিক ক্রেডেনশিয়াল প্রদান করে, তবে সার্ভার একটি JWT টোকেন রিটার্ন করবে।
POST http://localhost:3000/login
Content-Type: application/json
{
"username": "testuser",
"password": "password123"
}
সার্ভার রেসপন্স হিসেবে JWT টোকেন প্রদান করবে:
{
"token": "your-jwt-token-here"
}
৪. JWT সহ প্রটেক্টেড রুটে রিকোয়েস্ট করা
এই টোকেনটি এরপর আপনি /protected রুটে GET রিকোয়েস্টের হেডারে Authorization হিসাবে পাঠাতে পারবেন:
GET http://localhost:3000/protected
Authorization: Bearer your-jwt-token-here
যদি টোকেন সঠিক হয়, তবে সার্ভার রেসপন্স হিসাবে ব্যবহারকারীর তথ্য এবং একটি সফল বার্তা দিবে।
সারাংশ
JWT (JSON Web Token) একটি শক্তিশালী এবং নিরাপদ পদ্ধতি যা RESTful Web Services-এ নিরাপদ প্রমাণীকরণ এবং তথ্য এক্সচেঞ্জ করতে ব্যবহৃত হয়। এটি Stateless Authentication প্রদান করে, যা সার্ভারে কোনো স্টেট সংরক্ষণ না করে নিরাপদ যোগাযোগ নিশ্চিত করে। JWT তৈরি এবং যাচাই করার মাধ্যমে আপনি API এবং অন্যান্য সিস্টেমের মধ্যে নিরাপদ যোগাযোগ পরিচালনা করতে পারেন। JWT ব্যবহারের মাধ্যমে আপনি Cross-Domain Authentication, Scalability, এবং Security নিশ্চিত করতে পারেন, যা ওয়েব অ্যাপ্লিকেশন এবং সেবাগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ।
Read more