Secure Routes তৈরি করা

KoaJS এর Authentication এবং Authorization - কোআজেএস (KoaJS) - Web Development

230

KoaJS একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক, যা Node.js পরিবেশে ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। কখনও কখনও আপনার ওয়েব অ্যাপ্লিকেশনে কিছু রাউটকে নিরাপদ বা সুরক্ষিত রাখতে হয়, যাতে সেগুলি শুধুমাত্র অথেনটিকেটেড বা অথরাইজড ব্যবহারকারীরা অ্যাক্সেস করতে পারে। KoaJS এ সিকিউর রাউট তৈরি করতে আপনি সাধারণত অথেনটিকেশন এবং অথরাইজেশন ব্যবস্থাপনা ব্যবহার করেন, যেমন JWT (JSON Web Tokens) বা সেশন বেসড অথেনটিকেশন

এই টিউটোরিয়ালে, আমরা KoaJS-এ সুরক্ষিত রাউট তৈরি করার পদ্ধতি দেখব, যেখানে JWT (JSON Web Token) ব্যবহার করে অথেনটিকেশন এবং অথরাইজেশন করা হবে।


১. JWT (JSON Web Token) ব্যবহারের মাধ্যমে Secure Routes তৈরি করা

১.১. JWT এবং প্রয়োজনীয় প্যাকেজ ইনস্টল করা

প্রথমে আপনাকে JWT জেনারেট এবং ভেরিফাই করতে কিছু প্যাকেজ ইনস্টল করতে হবে:

npm install koa-jwt jsonwebtoken

এখানে:

  • koa-jwt: এটি KoaJS-এর জন্য একটি মিডলওয়্যার যা JWT টোকেন ভ্যালিডেট করতে সাহায্য করে।
  • jsonwebtoken: এটি JWT টোকেন তৈরি এবং ভেরিফাই করার জন্য ব্যবহৃত হয়।

১.২. JWT তৈরির জন্য একটি রাউট তৈরি করা

এখন, আমরা একটি রাউট তৈরি করব যেখান থেকে ব্যবহারকারী লগ ইন করার সময় একটি JWT টোকেন পাবেন।

const Koa = require('koa');
const Router = require('koa-router');
const jwt = require('jsonwebtoken');
const app = new Koa();
const router = new Router();

// Secret key (আপনার পরিবেশে এটি নিরাপদ স্থানে রাখুন)
const secretKey = 'your_secret_key';

// Login রাউট - যেখানে JWT তৈরি করা হবে
router.post('/login', async (ctx) => {
  const { username, password } = ctx.request.body;

  // উদাহরণস্বরূপ, সঠিক ইউজারনেম এবং পাসওয়ার্ড যাচাই করা
  if (username === 'user' && password === 'password123') {
    const token = jwt.sign({ username: username }, secretKey, { expiresIn: '1h' });
    ctx.body = { message: 'Login successful', token: token };
  } else {
    ctx.status = 401;
    ctx.body = { message: 'Invalid credentials' };
  }
});

// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে, /login রাউটে একটি ইউজারনেম এবং পাসওয়ার্ড যাচাই করা হচ্ছে। যদি এটি সঠিক হয়, তবে একটি JWT টোকেন তৈরি করা হবে, যা ব্যবহারকারী পরবর্তী রিকোয়েস্টে পাঠাতে পারবেন।

১.৩. Secure Routes (অথেনটিকেটেড রাউট) তৈরি করা

এখন, আমরা একটি সুরক্ষিত রাউট তৈরি করব যেখানে JWT টোকেন যাচাই করা হবে। এই রাউটটি শুধুমাত্র তখনই অ্যাক্সেসযোগ্য হবে যখন ইউজার একটি বৈধ JWT টোকেন প্রদান করবে।

const koaJwt = require('koa-jwt');

// Secure রাউট - JWT যাচাই করা হবে
router.get('/secure', koaJwt({ secret: secretKey }), async (ctx) => {
  ctx.body = { message: 'This is a secure route', user: ctx.state.user };
});

// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());

এখানে, koa-jwt মিডলওয়্যারটি ব্যবহার করা হচ্ছে, যা রিকোয়েস্টের Authorization হেডারে দেওয়া টোকেনের মাধ্যমে ব্যবহারকারীর অথেনটিকেশন চেক করবে। যদি টোকেন বৈধ হয়, তবে ব্যবহারকারী অ্যাক্সেস পাবে এবং ctx.state.user এর মধ্যে ব্যবহারকারীর তথ্য পাওয়া যাবে।


২. JWT টোকেন ভ্যালিডেশন

koa-jwt মিডলওয়্যার রিকোয়েস্টের Authorization হেডারে থাকা JWT টোকেন স্বয়ংক্রিয়ভাবে যাচাই করে। আপনি যদি কাস্টম ভ্যালিডেশন যুক্ত করতে চান, তবে আপনি jwt.verify() ব্যবহার করতে পারেন।

router.get('/secure', async (ctx, next) => {
  const token = ctx.headers.authorization && ctx.headers.authorization.split(' ')[1];

  if (!token) {
    ctx.status = 401;
    ctx.body = { message: 'Token missing' };
    return;
  }

  try {
    // JWT টোকেন যাচাই
    const decoded = jwt.verify(token, secretKey);
    ctx.state.user = decoded;  // ব্যবহারকারীর তথ্য ctx.state.user এ সংরক্ষণ
    await next();
  } catch (err) {
    ctx.status = 401;
    ctx.body = { message: 'Invalid or expired token' };
  }
}, async (ctx) => {
  ctx.body = { message: 'This is a secure route', user: ctx.state.user };
});

এখানে:

  • ctx.headers.authorization.split(' ')[1] দিয়ে Authorization হেডারে থাকা টোকেনটি অ্যাক্সেস করা হচ্ছে।
  • jwt.verify() ব্যবহার করে টোকেনটি যাচাই করা হচ্ছে।

৩. Logout রাউট

JWT এর জন্য একটি সাধারণ logout রাউট তৈরি করা হয় না, কারণ JWT স্টোরেজে সাধারণত কোন সার্ভার সাইড সেশন থাকে না। তবে, আপনি ক্লায়েন্ট সাইডে টোকেন মুছে ফেলতে পারেন।

router.post('/logout', async (ctx) => {
  ctx.body = { message: 'Logged out successfully' };
});

এখানে, ক্লায়েন্টের টোকেন মুছে ফেলতে হবে (যেমন LocalStorage বা Cookie থেকে)। সার্ভার সাইডে সেশন ব্যবস্থাপনা নেই, তাই টোকেনটি মুছে ফেললেই ইউজার লগ আউট হয়ে যাবে।


সারাংশ

KoaJS-এ সুরক্ষিত রাউট তৈরি করতে JWT (JSON Web Token) একটি শক্তিশালী উপায়। koa-jwt মিডলওয়্যার ব্যবহার করে আপনি JWT ভ্যালিডেশন করতে পারেন এবং শুধুমাত্র অথেনটিকেটেড ব্যবহারকারীদের জন্য রাউট এক্সেসযোগ্য করতে পারেন। এই পদ্ধতিটি রাউট সিকিউরিটি এবং অথোরাইজেশন সুবিধা প্রদান করে, এবং খুবই সহজভাবে অ্যাপ্লিকেশনে নিরাপত্তা ব্যবস্থা যুক্ত করা সম্ভব হয়।

Content added By
Promotion

Are you sure to start over?

Loading...