Tokens for Auth (JWT, Session Tokens)
সিস্টেমের সিকিউরিটি বা নিরাপত্তার প্রথম ধাপ হলো ইউজার আইডেন্টিটি ভেরিফিকেশন। এর জন্য মূলত আমরা Tokens ব্যবহার করি।
1. Session-based Auth (Traditional)
এখানে ইউজারের ইনফরমেশন সার্ভারের মেমোরিতে (বা ডেটাবেসে) সেভ থাকে।
- কিভাবে কাজ করে: ইউজার লগইন করলে সার্ভার একটি Session ID তৈরি করে এবং তা ব্রাউজারের কুখিতে (Cookie) পাঠিয়ে দেয়। পরবর্তী প্রতি রিকোয়েস্টে ব্রাউজার এই আইডি পাঠায় এবং সার্ভার তা ভেরিফাই করে।
- অসুবিধা: সার্ভারকে ইউজারের স্টেট মেইনটেইন করতে হয় (Stateful)। অ্যাপ্লিকেশন স্কেল করা কঠিন কারণ সব সার্ভারের এক্সেসযোগ্য কমন সেশন স্টোরেজ প্রয়োজন হয়।
2. Token-based Auth (Modern - JWT)
JWT (JSON Web Token) হলো একটি ওপেন স্ট্যান্ডার্ড যা সিকিউরলি তথ্য আদান-প্রদান করতে সাহায্য করে। এটি স্টেটলেস (Stateless)।
JWT এর গঠন:
- Header: অ্যালগরিদম এবং টোকেন টাইপ থাকে।
- Payload: ইউজারের ডেটা (যেমন: user_id, role) থাকে।
- Signature: টোকেনটি কেউ পরিবর্তন করেছে কিনা তা সিক্রেট কি দিয়ে ভেরিফাই করার জন্য।
সুবিধা:
- Stateless: সার্ভারকে কোনো সেশন সেভ করতে হয় না। টোকেন নিজেই নিজের ইনফরমেশন বহন করে।
- Scalability: লোড ব্যালেন্সারের পেছনের যেকোনো সার্ভার এই টোকেন ভেরিফাই করতে পারে।
- Mobile Friendly: কুখির ঝামেলা নেই বলে মোবাইল অ্যাপের জন্য এটি সেরা।
3. Refresh Tokens & Access Tokens
সিকিউরিটি বাড়ানোর জন্য দুটি টোকেন ব্যবহার করা হয়:
- Access Token: এটি অল্প সময়ের জন্য (যেমন ১৫ মিনিট) বৈধ থাকে এবং এটি দিয়ে এপিআই এক্সেস করা হয়।
- Refresh Token: এটি লম্বা সময়ের জন্য থাকে। যখন এক্সেস টোকেন এক্সপেয়ার হয়ে যায়, তখন এটি দিয়ে নতুন এক্সেস টোকেন নেওয়া হয়। এতে ইউজারকে বারবার লগইন করতে হয় না।
CAUTION
JWT এর ভেতরে কখনোই পাসওয়ার্ড বা সেনসিটিভ তথ্য রাখা উচিত নয়, কারণ এটি এনকোড করা থাকলেও খুব সহজেই ডিকোড করা যায়। এর সিগনেচার পার্ট শুধুমাত্র সার্ভার সাইডে ভেরিফাই করার জন্য।