JWT এর মাধ্যমে API Security কনফিগার করা

JWT (JSON Web Token) Authentication - এক্সপ্রেসজেএস (ExpressJS) - Web Development

293

JWT (JSON Web Token) একটি স্ট্যান্ডার্ড যা সার্ভার এবং ক্লায়েন্টের মধ্যে নিরাপদভাবে ডেটা আদান-প্রদান করার জন্য ব্যবহৃত হয়। JWT-এর মাধ্যমে API-র নিরাপত্তা নিশ্চিত করা একটি জনপ্রিয় পদ্ধতি, বিশেষত RESTful API-তে। ExpressJS-এ JWT ব্যবহার করে API নিরাপত্তা কনফিগার করতে হলে, ইউজারের Authentication এবং Authorization পরিচালনা করতে হয়, যেখানে JWT ইউজার আইডেন্টিফিকেশন এবং এক্সেস কন্ট্রোলের কাজ করে।


JWT কী?

JWT একটি কমপ্যাক্ট, URL-safe টোকেন যা সার্ভার এবং ক্লায়েন্টের মধ্যে তথ্য নিরাপদভাবে পাঠাতে ব্যবহৃত হয়। JWT সাধারণত তিনটি অংশে বিভক্ত থাকে:

  1. Header: টোকেনের ধরণ এবং এনক্রিপশন অ্যালগরিদম সম্পর্কে তথ্য।
  2. Payload: ব্যবহারকারী সম্পর্কিত তথ্য (যেমন, ইউজার আইডি, রোল, অথবা অন্যান্য ডেটা)।
  3. Signature: হেডার এবং পে-লোড সিগনেচার করতে ব্যবহৃত হয়, যাতে টোকেনটি নিরাপদ থাকে এবং পরিবর্তন করা না যায়।

JWT-এর মাধ্যমে API সিকিউরিটি কনফিগার করার জন্য, প্রধানত দুটি প্রক্রিয়া অনুসরণ করা হয়:

  1. Authentication: ইউজারের লগইন প্রক্রিয়া এবং JWT টোকেন তৈরি করা।
  2. Authorization: ইউজার টোকেন দিয়ে API রিকোয়েস্ট যাচাই এবং অনুমতি দেওয়া।

JWT ইনস্টল করা

প্রথমে, JWT-কে ExpressJS প্রকল্পে ব্যবহার করার জন্য, jsonwebtoken লাইব্রেরিটি ইনস্টল করতে হবে:

npm install jsonwebtoken

এছাড়া, express এবং body-parser ইনস্টল করা থাকলে ভালো, তবে ExpressJS এ body-parser সাধারণত বিল্ট-ইন থাকে।


JWT এর মাধ্যমে API Security কনফিগার করা

এখন আমরা একটি সাধারণ উদাহরণ দেখব, যেখানে ExpressJS এবং JWT ব্যবহার করে API সিকিউরিটি কনফিগার করা হবে। এখানে ইউজারের লগইন, JWT টোকেন তৈরি এবং টোকেন যাচাই করার প্রক্রিয়া দেখানো হবে।

১. ইউজার লগইন এবং JWT টোকেন তৈরি করা

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

app.use(express.json());

// Dummy user database
const users = [
  { id: 1, username: 'user1', password: 'password123' },
  { id: 2, username: 'user2', password: 'password456' }
];

// Secret key for signing JWT
const secretKey = 'your-secret-key';

// Login route to generate JWT token
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  
  // Find user by username and password
  const user = users.find(u => u.username === username && u.password === password);
  
  if (!user) {
    return res.status(401).send('Invalid credentials');
  }
  
  // Create JWT token
  const token = jwt.sign({ id: user.id, username: user.username }, secretKey, { expiresIn: '1h' });
  
  // Send the token to the client
  res.json({ token });
});

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

এখানে:

  • /login রাউটে ইউজার নাম এবং পাসওয়ার্ড চেক করা হয়। সঠিক হলে, একটি JWT টোকেন তৈরি করা হয়।
  • টোকেনটি jwt.sign() ফাংশন ব্যবহার করে তৈরি করা হয়, যেখানে ইউজারের তথ্য এবং সিক্রেট কী ব্যবহার করা হয়।
  • টোকেনটি 1 ঘণ্টার জন্য ভ্যালিড থাকবে (এটি expiresIn দিয়ে নির্ধারণ করা হয়েছে)।

২. Protected Route এবং Token যাচাই করা

API সিকিউর করতে, আপনাকে JWT টোকেন যাচাই করার জন্য একটি middleware তৈরি করতে হবে। এটি নিশ্চিত করবে যে রিকোয়েস্টটি সঠিকভাবে অথেনটিকেটেড।

// Middleware to verify JWT token
const verifyToken = (req, res, next) => {
  const token = req.headers['authorization'];

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

  // Remove 'Bearer ' prefix if present
  const tokenWithoutBearer = token.split(' ')[1];

  // Verify the token
  jwt.verify(tokenWithoutBearer, secretKey, (err, decoded) => {
    if (err) {
      return res.status(403).send('Invalid or expired token');
    }

    // Save user information in request for further use
    req.user = decoded;
    next();
  });
};

// Protected route, requires valid JWT token
app.get('/protected', verifyToken, (req, res) => {
  res.send(`Hello, ${req.user.username}. You have access to this protected resource.`);
});

এখানে:

  • verifyToken middleware রিকোয়েস্টের Authorization হেডার থেকে JWT টোকেন গ্রহণ করে।
  • টোকেনটি jwt.verify() ফাংশন দিয়ে যাচাই করা হয়। টোকেনটি যদি বৈধ হয়, তবে ইউজারের তথ্য req.user-এ রাখা হয়, যা পরবর্তী রাউট হ্যান্ডলারগুলোতে ব্যবহৃত হতে পারে।
  • যদি টোকেনটি অনুপস্থিত বা অবৈধ হয়, তবে 403 Forbidden রেসপন্স পাঠানো হয়।

৩. Full Example: JWT Authentication ও Authorization

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' },
  { id: 2, username: 'user2', password: 'password456' }
];

const secretKey = 'your-secret-key';

// Login route to generate JWT token
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  
  const user = users.find(u => u.username === username && u.password === password);
  
  if (!user) {
    return res.status(401).send('Invalid credentials');
  }
  
  const token = jwt.sign({ id: user.id, username: user.username }, secretKey, { expiresIn: '1h' });
  
  res.json({ token });
});

// Middleware to verify JWT token
const verifyToken = (req, res, next) => {
  const token = req.headers['authorization'];
  if (!token) {
    return res.status(403).send('Token is required');
  }

  const tokenWithoutBearer = token.split(' ')[1];
  jwt.verify(tokenWithoutBearer, secretKey, (err, decoded) => {
    if (err) {
      return res.status(403).send('Invalid or expired token');
    }
    req.user = decoded;
    next();
  });
};

// Protected route, requires JWT token
app.get('/protected', verifyToken, (req, res) => {
  res.send(`Hello, ${req.user.username}. You have access to this protected resource.`);
});

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

JWT এর মাধ্যমে API Security কনফিগার করার উপকারিতা

  • Scalability: JWT স্ট্যাটলেস, অর্থাৎ সার্ভারে কোনো session স্টোর করা লাগে না, যা API সিস্টেমকে আরো স্কেলেবল করে।
  • Security: JWT একটি সিক্রেট কী দ্বারা সাইন করা হয়, তাই টোকেনটি নিরাপদ থাকে এবং এতে কোনো পরিবর্তন করলে তা ধরা পড়ে।
  • Performance: JWT দ্রুত এবং কমপ্যাক্ট হওয়ায়, এটি বেশি ট্রাফিক হ্যান্ডল করার জন্য উপযোগী।

সারাংশ

ExpressJS-এ JWT (JSON Web Token) এর মাধ্যমে API সিকিউরিটি কনফিগার করা একটি অত্যন্ত কার্যকরী পদ্ধতি। আপনি JWT টোকেন ব্যবহার করে ইউজার Authentication পরিচালনা করতে পারেন এবং API রিকোয়েস্টে Authorization চেক করতে পারেন। JWT স্ট্যাটলেস এবং নিরাপদ হওয়ায় এটি API সিকিউরিটির জন্য একটি জনপ্রিয় এবং স্কেলেবল পদ্ধতি।

Content added By
Promotion

Are you sure to start over?

Loading...