Token-based Authentication এবং Socket.IO এর ইন্টিগ্রেশন

Socket.IO এর মাধ্যমে Authentication (সোকেট.আইও এর মাধ্যমে অথেনটিকেশন) - সকেট.আইও (Socket.IO) - Computer Programming

244

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

Socket.IO তে Token-based authentication প্রয়োগ করার জন্য, প্রথমে ক্লায়েন্ট সার্ভারকে একটি token পাঠায় এবং সার্ভার সেটি যাচাই করে নিশ্চিত হয় যে ক্লায়েন্ট অনুমোদিত কিনা। সঠিক token পেলে, তখন ক্লায়েন্ট Socket.IO এর মাধ্যমে সংযোগ স্থাপন করতে পারে।

এখানে Token-based authentication এবং Socket.IO এর ইন্টিগ্রেশন প্রক্রিয়া নিয়ে বিস্তারিত আলোচনা করা হবে:


1. JWT (JSON Web Token) ব্যবহার করে Authentication

1.1 JWT কী?

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

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

JWT একটি Base64Url এনকোডেড স্ট্রিং হিসেবে ক্লায়েন্ট এবং সার্ভারের মধ্যে আদান-প্রদান করা হয়।


2. Socket.IO এর সাথে JWT ইন্টিগ্রেশন

Socket.IO তে token-based authentication প্রয়োগ করার জন্য, সাধারণত connection হ্যান্ডল করার সময় JWT যাচাই করা হয়। ক্লায়েন্ট যখন সার্ভারে সংযোগ স্থাপন করে, তখন সে token পাঠায় এবং সার্ভার সেটি যাচাই করে। যদি token বৈধ হয়, তবে সংযোগ অনুমোদন করা হয়।


3. Socket.IO তে JWT Authentication প্রয়োগ করার পদক্ষেপ

3.1 Socket.IO সার্ভার (Node.js)

সার্ভারে JWT যাচাই করার জন্য jsonwebtoken প্যাকেজ ব্যবহার করা যেতে পারে। প্রথমে এই প্যাকেজটি ইন্সটল করতে হবে।

npm install socket.io jsonwebtoken

এখন Socket.IO এবং JWT দিয়ে সার্ভার কোড তৈরি করা হবে।

const http = require('http');
const socketIo = require('socket.io');
const jwt = require('jsonwebtoken');

// সার্ভারের জন্য HTTP সার্ভার তৈরি
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Socket.IO Server');
});

const io = socketIo(server);

// গোপন সার্ভার কিপদ্ধতি
const SECRET_KEY = 'your_secret_key';

// JWT যাচাই করার ফাংশন
function verifyToken(socket, next) {
  const token = socket.handshake.query.token;  // token এখানে query প্যারামিটার হিসেবে আসে

  if (!token) {
    return next(new Error('Authentication error'));  // token না থাকলে Error ফেরত পাঠানো
  }

  // JWT যাচাই করা
  jwt.verify(token, SECRET_KEY, (err, decoded) => {
    if (err) {
      return next(new Error('Authentication error'));  // token বৈধ না হলে Error ফেরত পাঠানো
    }
    socket.user = decoded;  // যেসম্পর্কে token তথ্য থাকলে তা socket এর সাথে যুক্ত করা
    next();  // যদি token বৈধ হয়, তাহলে connection অনুমোদন
  });
}

// Socket.IO connection হ্যান্ডলিং
io.use(verifyToken);  // Middleware হিসাবে JWT যাচাই

io.on('connection', (socket) => {
  console.log('A user connected', socket.user);  // decoded JWT তথ্য লগ করা

  // ক্লায়েন্ট থেকে মেসেজ গ্রহণ করা
  socket.on('message', (data) => {
    console.log('Message from client:', data);
    socket.emit('response', 'Message received');
  });

  socket.on('disconnect', () => {
    console.log('A user disconnected');
  });
});

// সার্ভার 3000 পোর্টে চলবে
server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে, verifyToken ফাংশনটি ব্যবহার করা হয়েছে যেটি ক্লায়েন্টের token যাচাই করে এবং যদি তা সঠিক না হয়, তবে ক্লায়েন্টকে সংযোগ করার অনুমতি দেয় না।


3.2 ক্লায়েন্ট সাইড (HTML + JavaScript)

ক্লায়েন্টের মাধ্যমে JWT পাঠানোর জন্য, socket.io-client প্যাকেজের মাধ্যমে একটি token পাঠাতে হবে।

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Socket.IO JWT Authentication</title>
  <script src="/socket.io/socket.io.js"></script>
</head>
<body>
  <h1>Socket.IO JWT Authentication Example</h1>

  <script>
    // JWT টোকেন (এটি সাধারণত সার্ভার থেকে ক্লায়েন্টকে পাঠানো হয়)
    const token = 'your_jwt_token_here';

    // সার্ভারের সাথে সংযোগ স্থাপন
    var socket = io('http://localhost:3000', {
      query: { token: token }  // টোকেন এখানে query প্যারামিটার হিসেবে পাঠানো হচ্ছে
    });

    // সার্ভার থেকে রেসপন্স গ্রহণ
    socket.on('response', function (data) {
      console.log('Received from server:', data);
    });

    // সার্ভারে মেসেজ পাঠানো
    socket.emit('message', 'Hello, Server!');
  </script>
</body>
</html>

এখানে, token ক্লায়েন্টে হার্ডকোড করা রয়েছে, তবে বাস্তব জীবনে এটি সাধারণত লগইন প্রক্রিয়া শেষে পাওয়া যায়। টোকেনটি সার্ভারে পাঠানো হয় query প্যারামিটার হিসেবে, এবং সার্ভার সেই token যাচাই করে।


4. JWT Token তৈরি করা (User Login)

সাধারণভাবে, JWT token একটি ব্যবহারকারী লগইন করার পর সার্ভার দ্বারা তৈরি করা হয়। নিচে একটি JWT token তৈরির উদাহরণ দেওয়া হলো:

const jwt = require('jsonwebtoken');

// ব্যবহারকারী তথ্য
const user = { id: 1, username: 'john_doe' };

// JWT টোকেন তৈরি করা
const token = jwt.sign(user, SECRET_KEY, { expiresIn: '1h' });

console.log('JWT Token:', token);

এখানে, jwt.sign() ফাংশনটি ব্যবহার করে ব্যবহারকারী তথ্যের উপর ভিত্তি করে একটি token তৈরি করা হচ্ছে। এই token এর মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদ যোগাযোগ স্থাপন করা হয়।


সারসংক্ষেপ:

  1. Token-based Authentication ব্যবহার করে আপনি Socket.IO তে ক্লায়েন্ট এবং সার্ভারের মধ্যে সুরক্ষিত যোগাযোগ নিশ্চিত করতে পারেন।
  2. JWT (JSON Web Token) ক্লায়েন্টের পরিচয় নিশ্চিত করার জন্য একটি জনপ্রিয় পদ্ধতি।
  3. socket.handshake.query.token দিয়ে ক্লায়েন্ট টোকেন পাঠায় এবং সার্ভার সেটি যাচাই করে।
  4. Socket.IO এর মাধ্যমে JWT authentication যুক্ত করে রিয়েল-টাইম যোগাযোগে নিরাপত্তা বাড়ানো যায়।

এভাবে Socket.IO এর সাথে token-based authentication (বিশেষত JWT) ইন্টিগ্রেট করে নিরাপদ যোগাযোগ ব্যবস্থা তৈরি করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...