Introduction
আজকের আলোচনা হচ্ছে JSON Web Token বা সংক্ষেপে JWT নিয়ে। সহজ কথায় বলতে গেলে, যখন আমরা কোনো ওয়েবসাইটে লগইন করি, তখন সার্ভার কীভাবে বোঝে যে আমি সেই সঠিক ইউজার? এই কাজটি করার একটি আধুনিক এবং জনপ্রিয় উপায় হলো JWT। এটি মূলত একটি নিরাপদ মাধ্যম যার মাধ্যমে এক পক্ষ থেকে অন্য পক্ষে তথ্য পাঠানো হয়। বিশেষ করে মাইক্রোসার্ভিস (Microservices) আর্কিটেকচারে এটি ব্যাপক ব্যবহৃত হয় [00:00]।
১. জেন্ডার বা স্ট্যাটলেস প্রোটোকল কী?
রেফারেন্স: https://www.youtube.com/watch?v=MB9SgSYw0Gw&t=96s
আমাদের ইন্টারনেট চলে HTTP প্রোটোকলের ওপর ভিত্তি করে। এই HTTP হলো "Stateless", মানে এটি আগের কোনো কথা মনে রাখতে পারে না। ধরুন, আপনি ফেসবুকে একবার লগইন করলেন। এখন আপনি যদি আপনার প্রোফাইল পেজে যান, সার্ভার কিন্তু ভুলে গেছে যে আপনি একটু আগেই লগইন করেছিলেন। তাই প্রতিবার আপনাকে চেনানোর জন্য কোনো একটা মেকানিজম দরকার। আগে এই কাজটা Session ID দিয়ে করা হতো, কিন্তু বর্তমানে বড় বড় অ্যাপ্লিকেশনে JWT বেশি সুবিধাজনক [02:02]।
২. সেশন আইডি বনাম জেডব্লিউটি (JWT)
রেফারেন্স: https://www.youtube.com/watch?v=MB9SgSYw0Gw&t=480s
-
সেশন আইডি: এখানে সার্ভার একটি আইডি তৈরি করে নিজের কাছে জমা রাখে এবং ইউজারকে দেয়। ইউজার প্রতিবার সেই আইডি দেখালে সার্ভার তার ডাটাবেজ থেকে মিলিয়ে দেখে। এটা অনেকটা মেলায় ব্যাগ জমা রাখার টোকেনের মতো [05:08]।
-
JWT: এটি একটু আলাদা। এখানে সার্ভার কোনো তথ্য নিজের কাছে জমা রাখে না। বরং ইউজারের সব তথ্য (যেমন নাম বা আইডি) একটি বিশেষ টোকেনের ভেতরেই ঢুকিয়ে ইউজারকে দিয়ে দেয়। ইউজার যখন আবার আসে, তখন সে ওই টোকেনটা দেখায়। সার্ভার শুধু টোকেনটা চেক করে দেখে যে সেটা কেউ টেম্পার বা পরিবর্তন করেছে কি না [08:42]।
৩. JWT এর গঠন (Structure)
রেফারেন্স: https://www.youtube.com/watch?v=MB9SgSYw0Gw&t=621s
একটি JWT টোকেন দেখতে অনেকগুলো হিজিবিজি অক্ষরের মতো মনে হলেও এর তিনটি প্রধান অংশ থাকে, যা ডট (.) দিয়ে আলাদা করা হয় [10:21]:
-
Header (হেডার): এখানে বলা থাকে টোকেনটি কোন অ্যালগরিদমে তৈরি।
-
Payload (পেলোড): এখানে ইউজারের তথ্য (যেমন ইউজার আইডি, নাম) থাকে। মনে রাখবেন, এখানে গোপন পাসওয়ার্ড রাখা উচিত নয় কারণ এটি যে কেউ ডিকোড করতে পারে [13:53]।
-
Signature (সিগনেচার): এটি সবচেয়ে গুরুত্বপূর্ণ। হেডার এবং পেলোডকে একটি গোপন 'Secret Key' দিয়ে এনক্রিপ্ট করে এটি বানানো হয়। যদি কেউ টোকেনের তথ্য সামান্য পরিবর্তন করে, তবে সিগনেচার আর মিলবে না [14:39]।
৪. কোডিং উদাহরণ (Conceptual Example)
ভিডিওতে সরাসরি কোডিং না দেখালেও, নোড জেএস (Node.js) এ কীভাবে একটি JWT তৈরি করা হয় তার একটি সহজ উদাহরণ নিচে দেওয়া হলো:
JavaScript
const jwt = require('jsonwebtoken');
// ১. ইউজারের তথ্য (Payload)
const user = {
id: 123,
username: 'sumit'
};
// ২. একটি সিক্রেট কি (Secret Key)
const secretKey = 'my-super-secret-key';
// ৩. টোকেন তৈরি করা (Sign)
const token = jwt.sign(user, secretKey, { expiresIn: '1h' });
console.log(token);
ব্যাখ্যা:
-
এখানে
userঅবজেক্টটি হলো আমাদের পেলোড। -
secretKeyহলো সেই চাবি যা দিয়ে আমরা টোকেনটি লক করছি। -
jwt.sign()ফাংশনটি এই সব কিছু মিলিয়ে একটি স্ট্রিং বা টোকেন তৈরি করে দিচ্ছে যা আমরা ইউজারকে পাঠিয়ে দেব।
৫. এনালাইসিস এবং আমার মতামত
কন্টেন্ট ক্রিয়েটর কী বোঝাতে চেয়েছেন? সুমিত ভাই এখানে মূলত বুঝিয়েছেন যে, মডার্ন ওয়েব অ্যাপ্লিকেশনে কেন আমরা সেশন ছেড়ে JWT এর দিকে ঝুঁকছি। বিশেষ করে যখন আমাদের অনেকগুলো সার্ভার থাকে (Microservices), তখন ডাটাবেজে সেশন চেক করা অনেক সময়সাপেক্ষ। JWT এই সমস্যা সমাধান করে কারণ এটি নিজেই নিজের পরিচয় বহন করে [18:14]।
বাস্তবতা এবং সীমাবদ্ধতা: JWT খুব সুবিধাজনক হলেও এর একটি বড় সমস্যা হলো—একবার টোকেন ইস্যু করলে সেটি সার্ভার থেকে সরাসরি ক্যান্সেল করা কঠিন (যদি না আপনি ব্ল্যাকলিস্টিং ব্যবহার করেন)। তাই টোকেনের মেয়াদ (Expiry time) সব সময় কম রাখা উচিত [17:26]।
বিকল্প ও পরামর্শ:
-
খুব সেনসিটিভ অ্যাপ্লিকেশনের জন্য সেশন এবং টোকেন দুটোর সংমিশ্রণ ব্যবহার করা যেতে পারে।
-
পেলোডে কখনো পাসওয়ার্ড বা ক্রেডিট কার্ডের মতো তথ্য রাখবেন না।
-
সিক্রেট কি (Secret Key) সব সময় অনেক বড় এবং জটিল রাখার চেষ্টা করবেন।
ট্যাক্সোনমি (শ্রেণিবিন্যাস):
-
Security: Authentication, Authorization.
-
Data Format: JSON.
-
Architecture: Stateless, Microservices.
সামগ্রিকভাবে, আপনি যদি একজন বিগিনার ডেভেলপার হন, তবে JWT শেখা আপনার জন্য বাধ্যতামূলক, কারণ বর্তমানে প্রায় সব আধুনিক এপিআই (API) এই পদ্ধতিতেই কাজ করে।
[
JSON Web Token - Bangla ( বাংলা ) Tutorial
Learn with Sumit - LWS - Bangladesh · 36K views
](http://www.youtube.com/watch?v=MB9SgSYw0Gw)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d