JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড (RFC 7519), যা একটি কমপ্যাক্ট এবং স্ব-ধারণকারী উপায় সংজ্ঞায়িত করে, যাতে পক্ষগুলির মধ্যে নিরাপদে তথ্য প্রেরণ করা যায়। এই তথ্য যাচাই এবং বিশ্বাস করা যায় কারণ এটি ডিজিটালি স্বাক্ষরিত।
JWT তিনটি অংশ নিয়ে গঠিত, ডট (.) দ্বারা বিভক্ত: হেডার (Header), পে-লোড (Payload) এবং স্বাক্ষর (Signature)। হেডার স্বাক্ষর অ্যালগরিদম নির্দিষ্ট করে, পে-লোডে দাবিগুলি থাকে, স্বাক্ষর বার্তা পরিবর্তন করা হয়নি তা যাচাই করতে ব্যবহৃত হয়।
JWT এর সাধারণ ব্যবহারের দৃশ্য
প্রমাণীকরণ (সবচেয়ে সাধারণ দৃশ্য), তথ্য বিনিময় (JWT নিরাপদে তথ্য প্রেরণ করতে পারে কারণ এগুলি স্বাক্ষরিত হতে পারে), অনুমোদন (ব্যবহারকারীর অনুমতি তথ্য অন্তর্ভুক্ত) এবং একক সাইন-ইন বাস্তবায়ন।
স্বাক্ষর অ্যালগরিদমের প্রকার
JWT একাধিক স্বাক্ষর অ্যালগরিদম সমর্থন করে, প্রধানত দুই প্রকার: HMAC ভিত্তিক সিমেট্রিক অ্যালগরিদম (যেমন HS256) এবং RSA/ECDSA ভিত্তিক অ্যাসিমেট্রিক অ্যালগরিদম (যেমন RS256, ES256)। সিমেট্রিক অ্যালগরিদম একই চাবি দিয়ে স্বাক্ষর এবং যাচাই করে, অ্যাসিমেট্রিক অ্যালগরিদম প্রাইভেট কী দিয়ে স্বাক্ষর করে, পাবলিক কী দিয়ে যাচাই করে।
JWT এ সংবেদনশীল তথ্য (যেমন পাসওয়ার্ড) সংরক্ষণ করবেন না, কারণ JWT এর পে-লোড অংশ শুধুমাত্র Base64 এনকোডেড, এনক্রিপ্টেড নয়। উচ্চ সুরক্ষা প্রয়োজন এমন অ্যাপ্লিকেশনের জন্য, সংক্ষিপ্ত মেয়াদ শেষের সময় ব্যবহার এবং টোকেন রোটেশন কৌশল প্রয়োগ করার পরামর্শ দেওয়া হয়।
JWT এর মেয়াদ শেষ হয়ে গেলে কী করবেন?
যখন JWT এর মেয়াদ শেষ হয়ে যায়, সার্ভার এই টোকেন প্রত্যাখ্যান করবে। প্রস্তাবিত সমাধান হল রিফ্রেশ টোকেন (Refresh Token) মেকানিজম বাস্তবায়ন করা, ক্লায়েন্ট রিফ্রেশ টোকেন ব্যবহার করে নতুন অ্যাক্সেস টোকেন পেতে পারে, ব্যবহারকারীকে পুনরায় লগইন করতে হবে না। রিফ্রেশ টোকেন সাধারণত দীর্ঘ মেয়াদী বৈধতা থাকে, তবে সতর্কতার সাথে সংরক্ষণ করা উচিত।
কঠোরভাবে বলতে গেলে, JWT ডিজাইন করা হয়েছে স্টেটলেস টোকেন হিসাবে, সত্যিকারে বাতিল করা যায় না। তবে কয়েকটি সাধারণ সমাধান রয়েছে: বাতিল টোকেনের ব্ল্যাকলিস্ট বজায় রাখা (JWT এর স্টেটলেস সুবিধা বাতিল করতে পারে), সংক্ষিপ্ত মেয়াদ শেষের সময় রিফ্রেশ টোকেনের সাথে ব্যবহার, অথবা টোকেনে সংস্করণ আইডেন্টিফায়ার এম্বেড করা, সার্ভার পুরানো সংস্করণ প্রত্যাখ্যান করতে পারে।
JWT একটি স্ব-ধারণকারী টোকেন, যা সমস্ত প্রয়োজনীয় তথ্য ধারণ করে, বিতরণ করা সিস্টেমের জন্য উপযুক্ত, সার্ভারে সেশন স্টেট সংরক্ষণের প্রয়োজন নেই। সেশন সার্ভার সাইড স্টোরেজ ভিত্তিক, সেশন স্টেট বজায় রাখার প্রয়োজন হয়, একক সার্ভার আর্কিটেকচারের জন্য বেশি উপযুক্ত। JWT এক্সটেনশনের জন্য বেশি বন্ধুত্বপূর্ণ, কিন্তু বাতিল করা জটিল; সেশন বাতিল করা সহজ, কিন্তু এক্সটেনসিবিলিটি কম।