ExpressJS এ Authentication এবং Authorization এর ভূমিকা

Authentication এবং Authorization - এক্সপ্রেসজেএস (ExpressJS) - Web Development

219

Authentication এবং Authorization হল ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা ব্যবস্থার দুটি মৌলিক অংশ। ExpressJS-এ এই দুইটি গুরুত্বপূর্ণ কাজের মাধ্যমে ইউজারদের নিরাপদভাবে অ্যাপ্লিকেশন ব্যবহার নিশ্চিত করা যায়। Authentication নিশ্চিত করে যে ইউজারটি আসলেই কে, এবং Authorization নিশ্চিত করে যে ইউজারটি নির্দিষ্ট সম্পদে অ্যাক্সেস করতে পারবে কি না।


Authentication কী?

Authentication হল একটি প্রক্রিয়া, যার মাধ্যমে একজন ইউজার নিজেকে শনাক্ত করতে পারে। উদাহরণস্বরূপ, ইউজার যখন লগইন করে, তখন সে তার পরিচয় (যেমন, ব্যবহারকারীর নাম এবং পাসওয়ার্ড) প্রদান করে। এটি একটি প্রমাণীকরণের প্রক্রিয়া, যা নিশ্চিত করে যে ইউজারটি কে এবং তার অনুমতি রয়েছে কি না।

ExpressJS এ Authentication

ExpressJS-এ Authentication করতে আপনি সাধারণত JWT (JSON Web Token), sessions, বা OAuth ব্যবহার করতে পারেন।

১. JWT (JSON Web Token) দিয়ে Authentication

JWT হল একটি স্ট্যান্ডার্ড যা সার্ভার এবং ক্লায়েন্টের মধ্যে তথ্য নিরাপদভাবে আদান-প্রদান করতে সহায়তা করে। এটি ইউজার লগইন পরবর্তী সময়ে সার্ভারের পক্ষ থেকে একটি টোকেন তৈরি করে এবং ক্লায়েন্ট সেটি পরবর্তী রিকোয়েস্টে পাঠায়।

লগইন রিকোয়েস্ট এবং JWT টোকেন তৈরি:

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const port = 3000;

app.use(express.json());

const users = [
  { id: 1, username: 'user1', password: 'password123' }
];

// Login endpoint
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  const user = users.find(u => u.username === username && u.password === password);
  
  if (user) {
    // Create JWT token
    const token = jwt.sign({ id: user.id, username: user.username }, 'your-secret-key', { expiresIn: '1h' });
    return res.json({ token });
  }
  
  res.status(401).send('Authentication failed');
});

// Protected route
app.get('/protected', (req, res) => {
  const token = req.headers['authorization'];

  if (!token) {
    return res.status(403).send('Token required');
  }

  // Verify token
  jwt.verify(token, 'your-secret-key', (err, decoded) => {
    if (err) {
      return res.status(403).send('Invalid token');
    }
    res.send('Protected content');
  });
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

এখানে:

  • /login রাউটে ইউজার লগইন করতে পারে এবং সঠিক ক্রেডেনশিয়াল থাকলে JWT টোকেন পাওয়া যাবে।
  • /protected রাউটটি শুধুমাত্র JWT টোকেন সহ অ্যাক্সেসযোগ্য, যা Authentication নিশ্চিত করে।

২. Sessions দিয়ে Authentication

Sessions ইউজারের লগইন তথ্য সার্ভারে স্টোর করার মাধ্যমে Authentication প্রক্রিয়া সম্পন্ন করে। সাধারণত cookies-এ session ID পাঠানো হয়, যা পরবর্তী রিকোয়েস্টে ক্লায়েন্ট থেকে ফেরত আসে।

const session = require('express-session');

app.use(session({
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: true
}));

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  
  // Dummy user check
  if (username === 'user1' && password === 'password123') {
    req.session.user = { username }; // Store user info in session
    return res.send('Login successful');
  }

  res.status(401).send('Invalid credentials');
});

// Access protected route with session check
app.get('/protected', (req, res) => {
  if (!req.session.user) {
    return res.status(403).send('Unauthorized access');
  }

  res.send('Protected content');
});

এখানে:

  • express-session middleware ব্যবহৃত হয়েছে, যা ইউজারের session কে ট্র্যাক করে।
  • ইউজার লগইন করার পর req.session.user-এ ইউজারের তথ্য স্টোর হয়, যা পরবর্তী রিকোয়েস্টে চেক করা হয়।

Authorization কী?

Authorization হল একটি প্রক্রিয়া, যার মাধ্যমে একটি ইউজারকে নির্দিষ্ট সম্পদ বা রিসোর্সে অ্যাক্সেস প্রদান করা হয়। Authentication এর মাধ্যমে ইউজারকে শনাক্ত করার পর, Authorization নিশ্চিত করে যে ইউজার নির্দিষ্ট রিসোর্সে অ্যাক্সেস করতে পারবে কি না।

ExpressJS এ Authorization

Authorization সাধারণত ইউজারের রোল বা পারমিশন চেক করার মাধ্যমে পরিচালিত হয়। উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশনে দুইটি ইউজার রোল থাকতে পারে: Admin এবং UserAdmin শুধুমাত্র অ্যাডমিন প্যানেলে অ্যাক্সেস পায়, এবং User সাধারণ পেজগুলো অ্যাক্সেস করতে পারে।

১. Role-based Authorization
const users = [
  { id: 1, username: 'admin', role: 'admin' },
  { id: 2, username: 'user', role: 'user' }
];

// Middleware to check role
const checkRole = (role) => {
  return (req, res, next) => {
    const user = users.find(u => u.username === req.session.user.username);
    if (user && user.role === role) {
      next(); // User has the right role, proceed to the next middleware
    } else {
      res.status(403).send('Forbidden');
    }
  };
};

// Admin route protected by role-based authorization
app.get('/admin', checkRole('admin'), (req, res) => {
  res.send('Admin Dashboard');
});

// User route
app.get('/user', (req, res) => {
  res.send('User Dashboard');
});

এখানে:

  • checkRole() middleware ব্যবহার করে ইউজারের রোল চেক করা হয়েছে। শুধুমাত্র Admin রোলের ইউজাররা /admin রাউটে প্রবেশ করতে পারবে।
২. Permission-based Authorization

এটি তখন ব্যবহৃত হয় যখন ইউজারের কাছে নির্দিষ্ট পারমিশন থাকে, যা রোলের চেয়ে বেশি সূক্ষ্ম। উদাহরণস্বরূপ, একজন ইউজারের কাছে create, edit, বা delete পারমিশন থাকতে পারে।

const permissions = {
  admin: ['create', 'edit', 'delete'],
  user: ['view']
};

// Middleware to check permission
const checkPermission = (permission) => {
  return (req, res, next) => {
    const user = users.find(u => u.username === req.session.user.username);
    if (user && permissions[user.role].includes(permission)) {
      next();
    } else {
      res.status(403).send('Forbidden');
    }
  };
};

// Route with specific permission check
app.post('/create', checkPermission('create'), (req, res) => {
  res.send('Resource created');
});

এখানে:

  • checkPermission() middleware ইউজারের পারমিশন চেক করে, এবং যদি ইউজারের সেই পারমিশন থাকে, তবে রিকোয়েস্ট প্রসেস হয়।

সারাংশ

ExpressJS-এ Authentication এবং Authorization এর মাধ্যমে আপনি অ্যাপ্লিকেশনে নিরাপত্তা যোগ করতে পারেন। Authentication ইউজারের পরিচয় নিশ্চিত করে (যেমন, লগইন), এবং Authorization নিশ্চিত করে যে ইউজার নির্দিষ্ট সম্পদে অ্যাক্সেস পাবে কি না। ExpressJS-এ JWT, sessions, এবং role-based অথবা permission-based authorization ব্যবহার করে এই দুইটি কাজ সহজেই প্রক্রিয়া করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...