Stateless Requests এর মাধ্যমে সেশন ম্যানেজমেন্ট

RESTful Web Services এর জন্য স্টেটলেস আর্কিটেকচার - রেস্টফুল ওয়েব সার্ভিস (RESTful Web Services) - Web Development

323

Stateless Requests এবং সেশন ম্যানেজমেন্ট

REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিস ডিজাইন করতে ব্যবহৃত হয়। RESTful ওয়েব সার্ভিসগুলি stateless হিসেবে কাজ করে, অর্থাৎ প্রতিটি রিকোয়েস্টের সাথে সার্ভার কোনো পূর্ববর্তী রিকোয়েস্ট বা সেশন সংক্রান্ত কোনো তথ্য সংরক্ষণ করে না। এটি সিস্টেমের স্কেলেবিলিটি এবং পারফরম্যান্স উন্নত করতে সাহায্য করে।

Stateless Requests মানে হল যে, সার্ভারের কাছে কোনো তথ্য বা স্টেট (যেমন, লগইন তথ্য, ব্যবহারকারী সেশন, ইত্যাদি) রাখা হয় না। প্রতিটি রিকোয়েস্ট নিজে একটি পূর্ণ এবং স্বাধীন রিকোয়েস্ট হিসেবে কাজ করে, এবং সার্ভার কোনও পূর্ববর্তী রিকোয়েস্টের ওপর নির্ভর করে না। তবে, এই বৈশিষ্ট্য সেশন ম্যানেজমেন্টের ক্ষেত্রে কিছু চ্যালেঞ্জ তৈরি করতে পারে। এই চ্যালেঞ্জ মোকাবেলার জন্য সাধারণত টোকেন বেসড অথেন্টিকেশন বা স্টেটলেস অথেন্টিকেশন ব্যবহৃত হয়, যেমন JWT (JSON Web Token)


Stateless Requests এর মাধ্যমে সেশন ম্যানেজমেন্ট

Stateless হওয়া সত্ত্বেও, ওয়েব সার্ভিসগুলিতে সেশন ম্যানেজমেন্ট করতে হলে আপনাকে ক্লায়েন্ট সাইডে কোনো ধরনের তথ্য সংরক্ষণ করতে হবে এবং সার্ভারের পক্ষ থেকে প্রতিটি রিকোয়েস্টে সেই তথ্য যাচাই করতে হবে। এখানে একটি সাধারণ কৌশল হল JWT (JSON Web Token) ব্যবহার করা। JWT ব্যবহার করে সেশন ম্যানেজমেন্টের প্রক্রিয়া এখানে বর্ণনা করা হলো।

1. JSON Web Token (JWT) কী?

JWT একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা JSON অবজেক্ট ব্যবহার করে নিরাপদ তথ্য ট্রান্সফার করতে ব্যবহৃত হয়। এটি একটি কমপ্যাক্ট এবং URL-সেন্ডেবল টোকেন যা দুইটি পক্ষের মধ্যে নিরাপদ তথ্য আদান প্রদান করতে সাহায্য করে। JWT-তে সাধারণত তিনটি অংশ থাকে:

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

JWT সাধারণত Authorization হেডারে ক্লায়েন্ট থেকে সার্ভারে পাঠানো হয়।


Stateless Request এবং JWT এর মাধ্যমে সেশন ম্যানেজমেন্ট

ধরা যাক, আপনি একটি RESTful ওয়েব সার্ভিস তৈরি করেছেন এবং ব্যবহারকারী লগইন করলে তাকে একটি JWT দেওয়া হয়। প্রতিটি পরবর্তী রিকোয়েস্টে ব্যবহারকারী ঐ টোকেন পাঠায়, এবং সার্ভার সেই টোকেন যাচাই করে, যাতে এটি একটি বৈধ টোকেন এবং ব্যবহারকারীকে অনুমোদন প্রদান করা হয়।

কীভাবে Stateless Request এর মাধ্যমে সেশন ম্যানেজমেন্ট করা যায়?

  1. ব্যবহারকারী লগইন: ব্যবহারকারী প্রথমবার লগইন করলে, সার্ভার তাদের পরিচয় যাচাই করে এবং একটি JWT প্রদান করে।
  2. JWT পাঠানো: পরবর্তী প্রতিটি রিকোয়েস্টে, ক্লায়েন্ট টোকেনটি Authorization হেডারে পাঠায়।
  3. JWT যাচাই: সার্ভার প্রতিটি রিকোয়েস্টে টোকেনটি যাচাই করে এবং নিশ্চিত হয় যে এটি বৈধ এবং অনুমোদিত ব্যবহারকারীর কাছ থেকে এসেছে।
  4. অথরাইজেশন এবং এক্সেস কন্ট্রোল: সার্ভার নিশ্চিত হয় যে, শুধুমাত্র বৈধ টোকেন ধারণকারী ব্যবহারকারীদের এক্সেস দেওয়ার মাধ্যমে সুরক্ষা বজায় রাখা হয়েছে।

উদাহরণ

ধরা যাক, একটি RESTful API তৈরি করা হয়েছে, যেখানে ব্যবহারকারী প্রথমবার লগইন করলে একটি JWT প্রদান করা হবে, এবং পরবর্তী রিকোয়েস্টে টোকেন দিয়ে অথেন্টিকেশন করতে হবে।

1. ব্যবহারকারী লগইন (JWT তৈরি করা)

ব্যবহারকারী তাদের ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন করলে সার্ভার একটি JWT তৈরি করে ব্যবহারকারীকে ফেরত পাঠাবে।

const jwt = require('jsonwebtoken');
const secretKey = 'your-secret-key';

const login = (req, res) => {
  const { username, password } = req.body;

  // ইউজারনেম এবং পাসওয়ার্ড যাচাই করা
  if (username === 'user' && password === 'password') {
    // একটি JWT তৈরি করা
    const token = jwt.sign({ username: 'user' }, secretKey, { expiresIn: '1h' });
    res.json({ token });
  } else {
    res.status(401).send('Unauthorized');
  }
};

2. JWT যাচাই (Stateless Request)

ব্যবহারকারী পরবর্তী রিকোয়েস্টে তাদের JWT পাঠায়, এবং সার্ভার এই টোকেন যাচাই করে নিশ্চিত করে যে এটি বৈধ।

const authenticateJWT = (req, res, next) => {
  const token = req.header('Authorization');

  if (!token) {
    return res.status(403).send('Access Denied');
  }

  jwt.verify(token, secretKey, (err, user) => {
    if (err) {
      return res.status(403).send('Invalid Token');
    }

    req.user = user; // JWT payload কে request এর মধ্যে সেট করা
    next();
  });
};

// API রাউটটি যেখানে অথেন্টিকেশন প্রয়োজন
app.get('/protected', authenticateJWT, (req, res) => {
  res.send('This is a protected route');
});

এখানে, authenticateJWT ফাংশনটি প্রতিটি রিকোয়েস্টে JWT যাচাই করে এবং এটি বৈধ হলে পরবর্তী প্রসেসিংয়ের জন্য অনুমতি দেয়।


সারাংশ

Stateless Requests রেস্টফুল ওয়েব সার্ভিসের একটি মূল বৈশিষ্ট্য। এতে, সার্ভার কোনো সেশন বা স্টেট তথ্য রাখে না এবং প্রতিটি রিকোয়েস্ট একে অপরের থেকে স্বাধীন থাকে। তবে, সেশন ম্যানেজমেন্টের জন্য JWT (JSON Web Token) একটি শক্তিশালী সমাধান হতে পারে। JWT ব্যবহার করে, আপনি প্রতিটি রিকোয়েস্টে নিরাপদে ব্যবহারকারীর পরিচয় যাচাই করতে পারেন এবং Stateless থাকা সত্ত্বেও সেশন ম্যানেজমেন্ট করতে পারেন। JWT এর মাধ্যমে Authorization হেডারে টোকেন পাঠিয়ে সার্ভার ব্যবহারকারীর অনুমতি যাচাই করে।

Content added By
Promotion

Are you sure to start over?

Loading...