JSON Web Token (JWT)
🟦 JSON Web Token (JWT) কী?
JSON Web Token (JWT) হলো একটি ওপেন স্ট্যান্ডার্ড (RFC 7519), যা দিয়ে দু’টি পক্ষ (যেমন—ক্লায়েন্ট ও সার্ভার) নিরাপদভাবে তথ্য আদান-প্রদান করতে পারে একটি কমপ্যাক্ট ও self-contained JSON অবজেক্টের মাধ্যমে।
এটি সাধারণত Authentication ও Authorization সিস্টেমে ব্যবহৃত হয়।
JWT সাধারণত signed হয়—মানে টোকেনে থাকা তথ্য কেউ পরিবর্তন করতে পারবে না কারণ সেটি ডিজিটালি সাইন করা থাকে।
JWT দুইভাবে সুরক্ষিত হতে পারে:
-
Signed token → তথ্য দেখা যায়, কিন্তু বদলানো যায় না
-
Encrypted token → তথ্য এনক্রিপ্টেড, দেখা যায় না
🟦 JWT কোথায় ব্যবহার করা হয়?
1️⃣ Authorization (সবচেয়ে বেশি)
ইউজার লগইন করলে সার্ভার তাকে একটি JWT দেয়। এরপর যেকোনো প্রোটেক্টেড API অ্যাক্সেস করতে গেলে ক্লায়েন্ট সেই টোকেন পাঠায়।
2️⃣ Information Exchange
এক পক্ষ থেকে অন্য পক্ষের কাছে নিরাপদে কোনো তথ্য পাঠাতে হলে JWT খুব কাজে লাগে, কারণ এটি signed হওয়ায় তথ্য পরিবর্তন হয়নি তা নিশ্চিত করে।
🟦 JWT এর স্ট্রাকচার
JWT মোট ৩টি অংশ নিয়ে তৈরি—এগুলো ডট (.) দিয়ে আলাদা থাকে:
✔️ 1. Header
এখানে থাকে:
-
কোন algorithm ব্যবহৃত হয়েছে? (HS256, RS256)
-
token type = JWT
✔️ 2. Payload
টোকেনের main data — অর্থাৎ claims থাকে:
-
Registered claims → exp, iss, sub
-
Public claims → সাধারণভাবে ব্যবহৃত ডাটা
-
Private claims → কাস্টম ডাটা যেমন name, role
⚠️ Payload এর ডাটা যে কেউ দেখতে পারে, তাই এখানে সংবেদনশীল তথ্য রাখা যাবে না।
✔️ 3. Signature
এখানে থাকে header + payload + secret/key ব্যবহার করে তৈরি একটি ডিজিটাল সিগনেচার।
এটি নিশ্চিত করে:
-
টোকেন বদলানো হয়নি ✔️
-
টোকেন trusted issuer থেকে এসেছে ✔️
🟦 JWT কীভাবে কাজ করে?
-
ইউজার লগইন করে
-
সার্ভার একটি JWT তৈরি করে
-
ক্লায়েন্ট সেই টোকেন সংরক্ষণ করে (localStorage/cookie)
-
যখন API কল করবে, Header এ পাঠাবে:
-
সার্ভার টোকেন verify করে — valid হলে অ্যাক্সেস দেয়।
🟦 JWT কেন ব্যবহার করবো?
-
⏳ কম সাইজ → SAML/XML তুলনায় ছোট ও দ্রুত
-
🌍 Internet-scale friendly → যেকোনো জায়গায় কাজ করে
-
🔐 Strong security → public/private key সহ signing
-
📱 Mobile-friendly → JSON হওয়ায় সহজে parse করা যায়
-
🧩 Stateless → সার্ভারকে session রাখতে হয় না
🟦 JWT Validation vs Verification
দুটো শব্দ শুনতে একই লাগে কিন্তু কাজ আলাদা।
🔵 Validation (টোকেন ঠিক আছে কিনা তা চেক)
-
টোকেনে ৩টা অংশ আছে?
-
সঠিকভাবে Base64URL encoded?
-
exp, iat, nbf সঠিক?
-
টোকেন expired নয়?
🔴 Verification (টোকেন সত্যি ও পরিবর্তন করা হয়নি কিনা)
-
Signature ঠিক আছে?
-
secret/public key দিয়ে মিলছে?
-
issuer (iss) ঠিক?
-
audience (aud) ঠিক?
✔️ Validation → টোকেনের ফরম্যাট ঠিক
✔️ Verification → টোকেন সত্যি/অরিজিনাল
🟦 JWT Encoding vs Decoding
✔️ Encoding (টোকেন তৈরি করা)
-
header + payload JSON → Base64URL encode
-
এরপর secret/key দিয়ে signature তৈরি
-
সব মিলিয়ে প্রস্তুত JWT
✔️ Decoding (টোকেন পড়া)
-
Base64URL decode → header ও payload দেখা
-
কেউই decode করতে পারে
-
কিন্তু verify করা গেলে তবেই বোঝা যায় সত্যি কিনা
⚠️ Decoding = শুধু পড়া
⚠️ Verification = টোকেন সত্যি কিনা প্রমাণ করা
🟦 সহজ ভাষায় সারসংক্ষেপ
| বিষয় | মানে |
|---|---|
| JWT | একটি signed JSON token |
| কাজ | Authentication & Authorization |
| অংশ | Header, Payload, Signature |
| Validation | ফরম্যাট ও claims সঠিক? |
| Verification | signature ঠিক আছে? |
| Encoding | টোকেন তৈরি |
| Decoding | টোকেন পড়া |
Comments
Post a Comment