JWT (JSON Web Token) হল একটি স্ট্যান্ডার্ড যা নিরাপদ ডেটা এক্সচেঞ্জ করার জন্য ব্যবহৃত হয়। এটি সাধারণত ব্যবহারকারীর সনাক্তকরণ (authentication) এবং অনুমোদন (authorization) এর জন্য ওয়েব অ্যাপ্লিকেশন বা সার্ভিসেসে ব্যবহৃত হয়। JWT একটি স্ট্রিং হিসেবে থাকে যা তিনটি অংশে বিভক্ত:
- Header
- Payload
- Signature
এগুলির মধ্যে প্রতিটি অংশের একটি নির্দিষ্ট কাজ থাকে এবং JWT এর গঠন ও নিরাপত্তা নিশ্চিত করতে সাহায্য করে।
1. Header (হেডার)
Header অংশটি JWT-এর প্রথম অংশ, যা সাধারণত দুটি উপাদান ধারণ করে:
- Alg (Algorithm): এটি কী অ্যালগরিদম ব্যবহার করে JWT সাইন করা হবে তা নির্দেশ করে, যেমন
HS256,RS256ইত্যাদি। - Typ (Type): এটি JWT-এর টাইপ নির্দেশ করে, যা সাধারণত
"JWT"থাকে।
Header সাধারণত Base64Url এ এনকোড করা হয়, যা একটি সংক্ষিপ্ত স্ট্রিং রূপে পরিবর্তিত হয়।
উদাহরণ:
{
"alg": "HS256",
"typ": "JWT"
}
এখানে:
algনির্দেশ করছে যে এই JWT কে HMAC SHA-256 অ্যালগরিদম দিয়ে সাইন করা হবে।typনির্দেশ করছে যে এটি একটি JWT টোকেন।
2. Payload (পে-লোড)
Payload অংশটি JWT এর দ্বিতীয় অংশ, যা মূল ডেটা ধারণ করে। এটি এমন তথ্য বা ক্লেইম (claims) ধারণ করে যা JWT এর ব্যবহারকারী বা অ্যাপ্লিকেশন পেতে চায়।
Payload বিভিন্ন ধরনের claims ধারণ করে:
- Registered Claims: এটি কিছু পূর্বনির্ধারিত নামকরণ করা ক্লেইম, যেমন
iss(issuer),exp(expiration),sub(subject),aud(audience) ইত্যাদি। - Public Claims: এগুলি কাস্টম ক্লেইম যেগুলি বিশ্বব্যাপী মানসম্পন্ন হতে পারে, কিন্তু এগুলির নাম থাকতে হবে ইউনিক।
- Private Claims: এটি কাস্টম ক্লেইম যা শুধু নির্দিষ্ট অ্যাপ্লিকেশন বা সার্ভিসের মধ্যে ব্যবহৃত হয়।
Payload অংশটি Base64Url এ এনকোড করা হয় এবং এটি সাইন করার জন্য ব্যবহার করা হয় না, তবে এটি সর্বসাধারণের জন্য সহজেই ডিকোড করা যেতে পারে।
উদাহরণ:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
এখানে:
subহল টোকেনের সত্ত্বাধিকারীর আইডি।nameহল সত্ত্বাধিকারীর নাম।iatহল "issued at" টাইমস্ট্যাম্প, যা নির্দেশ করে কখন টোকেনটি জেনারেট করা হয়েছে।
3. Signature (স্বাক্ষর)
Signature হল JWT এর তৃতীয় এবং শেষ অংশ। এটি টোকেনের নিরাপত্তা নিশ্চিত করে এবং যাচাইয়ের জন্য ব্যবহৃত হয়। Signature তৈরি করতে, প্রথমে Header এবং Payload অংশ দুটি এনকোড করা হয় এবং তারপর একটি secret key (যা জানেন শুধু সার্ভার) ব্যবহার করে সাইনিং অ্যালগরিদমের মাধ্যমে সাইন করা হয়। সাধারণত HMAC SHA-256 অ্যালগরিদম ব্যবহার করা হয়।
সিগনেচার তৈরি করার জন্য নিম্নলিখিত ধাপগুলি অনুসরণ করা হয়:
- Header এবং Payload এনকোড করুন।
.(ডট) দিয়ে তাদের মধ্যে যোগ করুন।- secret key এবং সাইনিং অ্যালগরিদম ব্যবহার করে সাইন করুন।
উদাহরণ:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
এখানে:
base64UrlEncodeHeader এবং Payload অংশকে Base64Url এনকোড করে।HMACSHA256হল সাইনিং অ্যালগরিদম, যা Header, Payload এবং Secret key ব্যবহার করে Signature তৈরি করে।
JWT এর গঠন:
JWT এর গঠন সাধারণত তিনটি অংশে বিভক্ত থাকে:
- Header: যা অ্যালগরিদম এবং টোকেন টাইপ উল্লেখ করে।
- Payload: যা মূল ডেটা বা ক্লেইম ধারণ করে।
- Signature: যা টোকেনের অখণ্ডতা এবং স্বীকৃতির জন্য ব্যবহৃত হয়।
এই তিনটি অংশ একত্রিত হয়ে একটি স্ট্রিং তৈরি করে, যা JWT হিসেবে পরিচিত।
পূর্ণ JWT উদাহরণ:
eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9.YXpEZHBqQl88FL0OktqlniG93k7fjxnm0v65wyhn_cY
এখানে:
- প্রথম অংশ হল Header (Base64Url এনকোড করা)।
- দ্বিতীয় অংশ হল Payload (Base64Url এনকোড করা)।
- তৃতীয় অংশ হল Signature (Base64Url এনকোড করা এবং সাইন করা)।
কেন JWT ব্যবহার করা হয়?
- Stateless Authentication: JWT একটি স্টেটলেস অথেন্টিকেশন টোকেন, যার মানে হল যে সার্ভারে কোনও সেশন স্টোরেজ সংরক্ষণ করতে হয় না। সমস্ত তথ্য JWT তে থাকে, তাই এটি দ্রুত এবং স্কেলেবল।
- Cross-Domain Authentication: JWT সহজেই বিভিন্ন ডোমেইনে ব্যবহার করা যেতে পারে, কারণ এটি HTTP হেডারে বা URL প্যারামিটারে সহজে সংযুক্ত করা যায়।
- Security: JWT স্বাক্ষরিত হয়, তাই আপনি নিশ্চিত থাকতে পারেন যে ডেটা পরিবর্তিত হয়নি এবং এটি একটি নির্ভরযোগ্য উৎস থেকে এসেছে।
- Compact and Self-contained: JWT একক স্ট্রিং আকারে থাকে, যা এটি পাঠানো এবং গ্রহণের জন্য কার্যকরী করে তোলে, বিশেষ করে ওয়েব অ্যাপ্লিকেশনে বা API-তে।
সারাংশ
JWT (JSON Web Token) হল একটি নিরাপদ এবং কার্যকরী পদ্ধতি ডেটা এক্সচেঞ্জ করার জন্য, যা মূলত তিনটি অংশে বিভক্ত:
- Header: অ্যালগরিদম এবং টোকেন টাইপ।
- Payload: মূল ডেটা বা ক্লেইম।
- Signature: ডেটার অখণ্ডতা এবং স্বীকৃতি নিশ্চিত করে।
JWT এর গঠন এবং নিরাপত্তা বৈশিষ্ট্যগুলি এটিকে আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিতে সেশন ম্যানেজমেন্ট, অথেন্টিকেশন এবং অথোরাইজেশন জন্য অত্যন্ত জনপ্রিয় করে তুলেছে।
Read more