সরাসরি প্রধান সামগ্রীতে চলে যান

জেসন ওয়েব টোকেন (JWT) এর সহজ পাঠ

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]:

  1. Header (হেডার): এখানে বলা থাকে টোকেনটি কোন অ্যালগরিদমে তৈরি।

  2. Payload (পেলোড): এখানে ইউজারের তথ্য (যেমন ইউজার আইডি, নাম) থাকে। মনে রাখবেন, এখানে গোপন পাসওয়ার্ড রাখা উচিত নয় কারণ এটি যে কেউ ডিকোড করতে পারে [13:53]।

  3. 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)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

Allow CSP in Chrome and Firefox and Call Server API in Spring boot Bangla

ঠিক আছে 🔥। আমি তোমার জন্য একটি সম্পূর্ণ README-style document বানাচ্ছি, যেখানে Chrome এবং Firefox দুটোতেই Spring Boot backend-এর জন্য CSP এবং CORS ঠিকভাবে configure করার process step-by-step আছে। README: CSP & CORS Configuration for Spring Boot (Chrome & Firefox) Overview এই document-এ দেখানো হয়েছে কিভাবে: Spring Boot backend থেকে Content Security Policy (CSP) configure করা যায়। Spring Boot backend থেকে Cross-Origin Resource Sharing (CORS) allow করা যায়। Chrome ও Firefox-এ fetch/API calls চালাতে হয় কীভাবে। ⚠️ Important: নিচের setup mostly development/test environment-এর জন্য। Production environment-এ অবশ্যই CSP & CORS secure করে configure করতে হবে। 1. Spring Boot Backend Configuration 1.1 CSP (Content Security Policy) Spring Boot WebFlux বা Spring MVC application-এ CSP header সেট করতে হবে: a) WebFlux (reactive) import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web....

AWS Lambda কী?

AWS Lambda কী? AWS Lambda হল একটি সার্ভারলেস কম্পিউটিং সার্ভিস, যা AWS ক্লাউডে কোড রান করার জন্য ব্যবহৃত হয়। Lambda ব্যবহারকারীদের কোনো সার্ভার বা ইনফ্রাস্ট্রাকচার ম্যানেজমেন্ট ছাড়াই কোড চালাতে সাহায্য করে। এটি মূলত ইভেন্ট-ড্রিভেন, যেখানে বিভিন্ন AWS সেবা (যেমন S3, DynamoDB, SNS) বা কাস্টম ইভেন্ট দ্বারা Lambda ফাংশন ট্রিগার হতে পারে। Lambda কোড রান করার পর তা একাধিক আউটপুট জেনারেট করতে পারে, অথবা অন্যান্য সিস্টেমে ফলাফল পাঠাতে পারে। Lambda একটি serverless প্ল্যাটফর্ম, যার মানে হল আপনি কোনও সার্ভার বা হোস্টিং ম্যানেজ করবেন না। আপনি শুধুমাত্র আপনার কোড লেখবেন এবং Lambda সার্ভিস তার ইনফ্রাস্ট্রাকচার পরিচালনা করবে। AWS Lambda এর প্রধান সুবিধা: সার্ভার পরিচালনা প্রয়োজন নেই : আপনি কেবল কোড লেখবেন, সার্ভার বা ইনফ্রাস্ট্রাকচার সম্পর্কিত কোনও চিন্তা করার দরকার নেই। স্কেলিং : Lambda স্বয়ংক্রিয়ভাবে ইনফ্রাস্ট্রাকচার স্কেল করতে পারে। আপনার অ্যাপ্লিকেশনের উপর ট্রাফিক বাড়লে Lambda আপনাআপনি সেই অনুযায়ী স্কেল হবে। কোনও ইনিশিয়াল কস্ট নেই : আপনি শুধুমাত্র আপনার কোড রান হওয়া সময়ের জন্য খরচ দেন, স...