KoaJS-এ JWT (JSON Web Tokens) ব্যবহার করে অথেন্টিকেশন একটি শক্তিশালী এবং সিকিউর ওয়েব অ্যাপ্লিকেশন তৈরি করার একটি পদ্ধতি। JWT-কে আধুনিক অথেন্টিকেশন সিস্টেমে খুবই জনপ্রিয় ভাবে ব্যবহার করা হয় কারণ এটি নিরাপদ এবং স্কেলযোগ্য। JWT-এ সাধারণত একটি টোকেন তৈরি করা হয়, যা ইউজারের অথেন্টিকেশন নিশ্চিত করার জন্য সার্ভার এবং ক্লায়েন্টের মধ্যে আদান-প্রদান করা হয়। এই টোকেনটি ইউজারের পরিচয় নিশ্চিত করার জন্য বিভিন্ন এপিআই রিকোয়েস্টে পাঠানো হয়।
এখানে আমরা কিভাবে KoaJS-এ JWT ব্যবহার করে অথেন্টিকেশন তৈরি করা যায় তা দেখব।
JWT কি এবং কিভাবে কাজ করে?
JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা নিরাপদ উপায়ে তথ্য বিনিময়ের জন্য ব্যবহৃত হয়। এটি মূলত তিনটি অংশে বিভক্ত:
- Header: টোকেনের মেটাডেটা, যেমন সিগনেচার অ্যালগরিদম।
- Payload: ইউজারের তথ্য বা কাস্টম ক্লেইমস (claims), যেমন ইউজারের আইডি।
- Signature: টোকেনের নিরাপত্তা নিশ্চিত করে, যাতে এটি মডিফাই না হয়।
KoaJS-এ JWT Authentication সেটআপ করা
KoaJS-এ JWT অথেন্টিকেশন সেটআপ করার জন্য কিছু প্যাকেজ ইনস্টল করতে হবে। আমরা jsonwebtoken প্যাকেজটি ব্যবহার করব টোকেন তৈরি এবং ভেরিফাই করার জন্য, এবং koa-jwt প্যাকেজটি ব্যবহার করব JWT অথেন্টিকেশন মিডলওয়্যার হিসেবে।
১. JWT প্যাকেজ ইনস্টল করা
প্রথমে jsonwebtoken এবং koa-jwt প্যাকেজ ইনস্টল করুন:
npm install jsonwebtoken koa-jwt
jsonwebtoken: এটি JWT টোকেন তৈরি এবং ভেরিফাই করতে ব্যবহৃত হবে।koa-jwt: এটি KoaJS-এর জন্য একটি মিডলওয়্যার, যা JWT টোকেন ভেরিফাই করতে ব্যবহৃত হয়।
২. KoaJS অ্যাপে JWT Authentication সেটআপ করা
এখন, KoaJS অ্যাপ্লিকেশন তৈরি করে JWT অথেন্টিকেশন যুক্ত করা যাক।
const Koa = require('koa');
const Router = require('koa-router');
const jwt = require('jsonwebtoken');
const koaJwt = require('koa-jwt');
const bodyParser = require('koa-bodyparser');
const app = new Koa();
const router = new Router();
// সিক্রেট কী (এটি একটি গোপন কী, যা টোকেনের সিগনেচার তৈরিতে ব্যবহৃত হবে)
const SECRET_KEY = 'your-secret-key';
// কনফিগারেশন এবং মিডলওয়্যার
app.use(bodyParser()); // ফর্ম ডেটা বা JSON ডেটা হ্যান্ডল করার জন্য
// JWT অথেন্টিকেশন মিডলওয়্যার
app.use(koaJwt({ secret: SECRET_KEY }).unless({ path: ['/login', '/register'] }));
// রাউট তৈরি করা
router.post('/login', async (ctx) => {
const { username, password } = ctx.request.body;
// এখানে ইউজারনেম এবং পাসওয়ার্ড যাচাই করা হবে
if (username === 'user' && password === 'password') {
// ইউজার অথেন্টিকেশন সফল হলে একটি JWT টোকেন তৈরি করা হবে
const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
// টোকেন রেসপন্স হিসেবে পাঠানো হচ্ছে
ctx.body = { message: 'Authentication successful!', token };
} else {
ctx.status = 401;
ctx.body = { message: 'Invalid username or password!' };
}
});
router.get('/protected', async (ctx) => {
// যদি JWT টোকেন ভ্যালিড হয়, তাহলে এই রাউটে অ্যাক্সেস পাওয়া যাবে
ctx.body = { message: 'You have access to this protected route!', user: ctx.state.user };
});
// মিডলওয়্যার এবং রাউট সেট করা
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
কোড বিশ্লেষণ:
- JWT টোকেন তৈরি করা:
/loginরাউটে ইউজারনেম এবং পাসওয়ার্ড যাচাই করার পরে, যদি সেটি সঠিক হয়, তবেjwt.sign()মেথড ব্যবহার করে একটি JWT টোকেন তৈরি করা হয়। এই টোকেনটি ক্লায়েন্টকে ফেরত পাঠানো হয়, যাতে ক্লায়েন্ট পরবর্তী রিকোয়েস্টে এটি পাঠাতে পারে। - JWT ভেরিফিকেশন:
koa-jwtমিডলওয়্যারটি JWT টোকেন ভেরিফাই করার জন্য ব্যবহৃত হয়। যখনই ইউজার একটি রিকোয়েস্ট পাঠায়,koa-jwtস্বয়ংক্রিয়ভাবেAuthorizationহেডারে থাকা টোকেনটি ভেরিফাই করবে। যদি টোকেন ভ্যালিড হয়, তবেctx.state.userএ ইউজারের তথ্য পেয়ে যাবে এবং সুরক্ষিত রাউটের অ্যাক্সেস পাবেন। - /protected রাউট: এই রাউটটি সুরক্ষিত (protected) এবং শুধুমাত্র একটি ভ্যালিড JWT টোকেন সহ অ্যাক্সেসযোগ্য। যখন একটি টোকেন পাঠানো হয়, KoaJS এটি ভেরিফাই করবে এবং সঠিক হলে
ctx.state.userথেকে ইউজারের তথ্য ফেরত দেবে।
৩. কিভাবে JWT টোকেন পাঠানো যায়?
JWT টোকেন সাধারণত HTTP রিকোয়েস্টের Authorization হেডারে পাঠানো হয়:
Authorization: Bearer <your-jwt-token>
আপনি axios বা fetch এর মতো ফ্রন্টএন্ড লাইব্রেরি ব্যবহার করে এই টোকেনটি সার্ভারে পাঠাতে পারেন।
উদাহরণ (JavaScript - ফ্রন্টএন্ড):
fetch('http://localhost:3000/protected', {
method: 'GET',
headers: {
'Authorization': 'Bearer <your-jwt-token>',
}
})
.then(response => response.json())
.then(data => console.log(data));
৪. JWT টোকেন ভেরিফিকেশন এবং এক্সপায়ারেশন
JWT-এ অপশনাল expiresIn প্রপার্টি থাকে, যা টোকেনের মেয়াদ নির্ধারণ করে। যেমন, এখানে expiresIn: '1h' ব্যবহার করা হয়েছে, যা টোকেনের মেয়াদ এক ঘণ্টা। এক ঘণ্টা পর টোকেনটি এক্সপায়ার হয়ে যাবে এবং ব্যবহারকারীদের আবার লগইন করতে হবে।
সারাংশ
KoaJS-এ JWT (JSON Web Tokens) ব্যবহার করে অথেন্টিকেশন একটি শক্তিশালী এবং নিরাপদ উপায়। আমরা jsonwebtoken এবং koa-jwt প্যাকেজের সাহায্যে JWT তৈরি এবং ভেরিফাই করেছি, এবং সুরক্ষিত রাউট তৈরির মাধ্যমে অথেন্টিকেশন নিশ্চিত করেছি। এটি একটি সহজ এবং স্কেলেবল অথেন্টিকেশন সিস্টেম তৈরি করতে সহায়তা করে যা ক্লায়েন্ট এবং সার্ভারের মধ্যে সুরক্ষিতভাবে তথ্য আদান-প্রদান করতে পারে।
Read more