JWT (JSON Web Token) হল একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদভাবে তথ্য আদান-প্রদান করতে ব্যবহৃত হয়। এটি একটি টোকেন ভিত্তিক অথেন্টিকেশন প্রযুক্তি, যা মূলত RESTful API এবং Single Page Applications (SPA) এর ক্ষেত্রে ব্যবহৃত হয়। JWT একটি সাইন করা এবং এনকোড করা স্ট্রিং যা বিভিন্ন অংশের মাধ্যমে তথ্য ধারণ করে, এবং এটি সার্ভার এবং ক্লায়েন্টের মধ্যে নিরাপদভাবে তথ্য ট্রান্সফার করতে ব্যবহৃত হয়।
JWT এর মূল উপাদানসমূহ:
JWT তিনটি অংশে বিভক্ত:
- Header (হেডার)
- Payload (পে-লোড)
- Signature (সিগনেচার)
JWT এর স্ট্রাকচার
JWT সাধারণত তিনটি অংশে বিভক্ত থাকে, এবং প্রতিটি অংশ একটি ডেলিমিটার দ্বারা আলাদা করা হয়। এটি এমন একটি স্ট্রিং যা header.payload.signature ফরম্যাটে থাকে।
<Header>.<Payload>.<Signature>
1. Header (হেডার):
- হেডার সাধারণত দুটি অংশে বিভক্ত:
- টোকেনের ধরন (
typ): সাধারণতJWTথাকে। - এনকোডিং এলগরিদম (
alg): সাধারণতHS256বাRS256থাকে।
- টোকেনের ধরন (
উদাহরণ:
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload (পে-লোড):
- পে-লোডের মধ্যে Claims থাকে, যা ব্যবহারকারীর তথ্য বা টোকেনের সাথে সম্পর্কিত ডেটা ধারণ করে। Claims হল তিন ধরনের:
- Registered Claims: যেমন
iss(issuer),exp(expiration time),sub(subject) ইত্যাদি। - Public Claims: আপনার নিজস্ব কাস্টম ডেটা, যা আপনি ট্রান্সফার করতে পারেন।
- Private Claims: ক্লায়েন্ট এবং সার্ভারের মধ্যে নির্দিষ্ট তথ্য।
- Registered Claims: যেমন
উদাহরণ:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
3. Signature (সিগনেচার):
- সিগনেচার অংশটি টোকেনটির নিরাপত্তা নিশ্চিত করে। এটি
HeaderএবংPayloadকে সিক্রেট কী বা পাবলিক কী দিয়ে সাইন করে তৈরি করা হয়। - উদাহরণস্বরূপ, একটি হ্যাশিং এলগরিদম (যেমন
HS256) ব্যবহার করে সিগনেচার তৈরি করা হয়:HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
এই সিগনেচারটি পরে টোকেনের খ্যাতি এবং সততা নিশ্চিত করার জন্য ব্যবহৃত হয়।
JWT কিভাবে কাজ করে?
JWT ব্যবহার করা হয় ব্যবহারকারীর অথেন্টিকেশন এবং অথরাইজেশনের জন্য। এটি বিশেষত Stateless Authentication-এর জন্য উপকারী, যেখানে সার্ভার কোন সেশন বা ইউজার স্টেট ট্র্যাক করে না। নিম্নলিখিত পদক্ষেপগুলো দিয়ে JWT সাধারণত কাজ করে:
1. লগইন এবং JWT তৈরি করা:
- ব্যবহারকারী তার ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন করে।
- সার্ভার ব্যবহারকারীর পরিচয় যাচাই করে এবং একটি JWT তৈরি করে।
- JWT-তে ইউজারের তথ্য (যেমন, user ID, role, অথবা অন্যান্য claims) এবং একটি সিক্রেট কী দিয়ে সাইন করা হয়।
- সার্ভার এই JWT ব্যবহারকারীর কাছে ফেরত পাঠায়।
2. JWT দিয়ে অথরাইজেশন:
- পরবর্তী রিকোয়েস্টের জন্য, ব্যবহারকারী তার JWT টোকেনকে HTTP হেডারে
Authorization: Bearer <JWT>আকারে পাঠায়। - সার্ভার এই JWT কে ভ্যালিডেট করে এবং টোকেনের মধ্যে থাকা claims এর ভিত্তিতে অ্যাক্সেস প্রদান করে।
3. JWT এর ভ্যালিডেশন:
- সার্ভার JWT টোকেনটির Signature অংশ পরীক্ষা করে সুরক্ষা নিশ্চিত করে।
- যদি সিগনেচার এবং পে-লোডের মধ্যে কোনও অমিল থাকে, তবে সার্ভার রিকোয়েস্টটি অগ্রাহ্য করবে।
- JWT এর
expclaim চেক করে নিশ্চিত করা হয় যে টোকেনটি মেয়াদ উত্তীর্ণ হয়নি।
4. JWT টোকেনের মেয়াদ:
- JWT সাধারণত একটি
exp(expiration) claim রাখে, যা টোকেনের মেয়াদ নির্ধারণ করে। - মেয়াদ উত্তীর্ণ হলে, ব্যবহারকারীকে আবার লগইন করতে বলা হয় এবং নতুন JWT তৈরি করা হয়।
JWT এর সুবিধা
- Stateless Authentication: JWT-তে কোনও সেশন স্টোরেজ দরকার হয় না। সার্ভার সেশন ট্র্যাক না করেও ব্যবহারকারীকে অথেন্টিকেট করতে পারে।
- Scalability: যেহেতু সার্ভার সেশন ট্র্যাক করে না, একাধিক সার্ভার ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটি স্কেল করা সহজ।
- Security: JWT এর সিগনেচার অংশটি নিরাপত্তা নিশ্চিত করে, যা ম্যান-ইন-দ্য-মিডল আক্রমণ (MITM) থেকে সুরক্ষা প্রদান করে।
- Cross-Domain Authorization: JWT সহজে বিভিন্ন ডোমেইনে অথরাইজেশন ব্যবস্থায় ব্যবহার করা যেতে পারে, যেমন Single Sign-On (SSO) সিস্টেমে।
JWT এর সীমাবদ্ধতা
- Token Size: JWT সাধারণত বড় হয়, কারণ এতে ব্যবহারকারীর তথ্য এবং সিগনেচার থাকে। তাই বড় টোকেন ফাইল পাঠানো ব্যান্ডউইথ ব্যবহারে প্রভাব ফেলতে পারে।
- Token Expiry: একবার JWT টোকেন তৈরি হলে তার মেয়াদ শেষ হওয়ার আগে এটি বাতিল করা সম্ভব নয়। এর মানে হল যে টোকেনটি একবার মিসইউজ হলে তা কার্যকর হতে পারে যতক্ষণ না এটি মেয়াদ উত্তীর্ণ না হয়।
- Security Risks: যদিও JWT সিক্রেট কী দিয়ে সাইন করা থাকে, তবে যদি সিক্রেট কী ফাঁস হয়ে যায়, তবে টোকেনের নিরাপত্তা ক্ষতিগ্রস্ত হতে পারে।
সারাংশ
JWT (JSON Web Token) একটি নিরাপদ টোকেন ভিত্তিক অথেন্টিকেশন পদ্ধতি, যা stateless authentication সমর্থন করে। এটি header, payload, এবং signature নিয়ে তৈরি হয় এবং ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদভাবে তথ্য আদান-প্রদান করতে ব্যবহৃত হয়। JWT ব্যবহার করে Cross-Domain অথরাইজেশন, API অথেন্টিকেশন, এবং Single Sign-On (SSO) সহজ হয়। এটি নিরাপত্তা নিশ্চিত করার জন্য সিগনেচার ব্যবহার করে এবং সার্ভার সেশন ট্র্যাক করার প্রয়োজন ছাড়াই কাজ করতে পারে।
Read more