JWT ডিকোডার
একটি JSON Web Token পেস্ট করে এর header ও payload পড়ুন, কখন মেয়াদ শেষ হবে দেখুন এবং প্রতিটি ক্লেইম বুঝুন। আপনার টোকেন কখনো ব্রাউজার ছেড়ে যায় না।
ব্রাউজারেই চলেসাইন-আপ লাগে নাকিছুই আপলোড হয় না
ডিকোড করা মানে যাচাই করা নয়। JWT-এর header ও payload যে কেউ পড়তে পারে, কারণ সেগুলো শুধু base64url-এনকোড করা। এই টুল দেখায় টোকেনটি কী দাবি করে; টোকেনটি আসল কিনা তা প্রমাণ করে না। সবসময় আপনার সার্ভারে সিগনেচার যাচাই করুন।
Header
Payload
ক্লেইমের ব্যাখ্যা
সিগনেচার যাচাই (ঐচ্ছিক, HS256/HS384/HS512)
আপনার দেওয়া সিক্রেট দিয়ে ব্রাউজারের Web Crypto API ব্যবহার করে HMAC সিগনেচার যাচাই করে। সিক্রেট কখনো এই পেজ ছেড়ে যায় না। RSA/ECDSA টোকেনের জন্য ইস্যুকারীর পাবলিক কী লাগে, তাই সেগুলো এখানে যাচাই হয় না।
JWT ডিকোডার কীভাবে ব্যবহার করবেন
- টোকেনটি এনকোড করা টোকেন বক্সে পেস্ট করুন। Authorization হেডার থেকে আসা শুরুর
Bearerউপেক্ষা করা হয়। - header ও payload সঙ্গে সঙ্গে ডিকোড হয়ে ফরম্যাট করা JSON হিসেবে দেখা যায়।
- ক্লেইমের ব্যাখ্যা টেবিল পড়ুন:
exp,iatওnbfতারিখে রূপান্তরিত হয়, সাথে “মেয়াদ শেষ হবে” / “মেয়াদ শেষ হয়েছে” সময়। - মেয়াদ-সংক্রান্ত সমস্যার জন্য স্ট্যাটাস বার এবং
alg: none-এর মতো ঝুঁকিপূর্ণ সেটিংয়ের জন্য সতর্কবার্তা দেখুন। - চাইলে শেয়ার্ড সিক্রেট দিয়ে HS256, HS384 বা HS512 সিগনেচার লোকালি যাচাই করুন।
JWT-এর ভেতরে কী থাকে?
একটি JSON Web Token (RFC 7519) হলো বিন্দু দিয়ে জোড়া তিনটি base64url স্ট্রিং: header.payload.signature। header-এ সাইনিং অ্যালগরিদম (alg) ও টোকেনের ধরন থাকে। payload-এ ক্লেইম থাকে, যেমন ব্যবহারকারী কে এবং টোকেনের মেয়াদ কখন শেষ। signature প্রথম দুই অংশের ওপর একটি সিক্রেট বা প্রাইভেট কী দিয়ে গণনা করা হয়।
ডিকোড করা মানে যাচাই করা নয়
header ও payload শুধু এনকোড করা, এনক্রিপ্ট করা নয়, তাই টোকেন হাতে থাকলে যে কেউ এগুলো পড়তে পারে। এজন্যই JWT payload-এ কখনো পাসওয়ার্ড বা সিক্রেট রাখবেন না। ডিকোড করলে জানা যায় টোকেন কী বলছে। সিগনেচার যাচাই, সাধারণত আপনার API সার্ভারে jose বা PyJWT-এর মতো লাইব্রেরি দিয়ে, প্রমাণ করে কে এটি ইস্যু করেছে এবং এটি পরিবর্তিত হয়নি। সার্ভারকে exp, nbf, iss ও aud-ও যাচাই করতে হবে এবং অপ্রত্যাশিত অ্যালগরিদম প্রত্যাখ্যান করতে হবে।
নিবন্ধিত ক্লেইমের চিট শিট
| ক্লেইম | অর্থ |
|---|---|
iss | Issuer: কে টোকেনটি তৈরি ও সাইন করেছে |
sub | Subject: সাধারণত ব্যবহারকারীর ID |
aud | Audience: টোকেনটি কোন API-এর জন্য |
exp | মেয়াদ শেষের সময়, Unix epoch থেকে সেকেন্ডে |
nbf | এই সময়ের আগে বৈধ নয় |
iat | ইস্যুর সময় |
jti | টোকেনের অনন্য ID, বাতিল-তালিকার জন্য কাজে লাগে |
“token expired” ত্রুটি ডিবাগ করা
নতুন মনে হওয়া টোকেনও যদি API প্রত্যাখ্যান করে, তাহলে সার্ভারের ঘড়ির সাথে exp ও nbf মিলিয়ে দেখুন। মেশিনগুলোর মধ্যে ঘড়ির সামান্য পার্থক্য সাধারণ ব্যাপার, তাই বেশিরভাগ লাইব্রেরি ৩০-৬০ সেকেন্ড ছাড় দেয়। এছাড়া দেখুন exp সেকেন্ডে আছে কিনা: মিলিসেকেন্ডে মান দেওয়া একটি প্রচলিত বাগ, যা মেয়াদকে হাজার হাজার বছর ভবিষ্যতে ঠেলে দেয়।
সচরাচর জিজ্ঞাসিত প্রশ্ন
প্রোডাকশনের JWT এখানে পেস্ট করা কি নিরাপদ?
এই টুল কি JWT সিগনেচার যাচাই করে?
আমার টোকেন মেয়াদোত্তীর্ণ দেখাচ্ছে কেন?
exp ক্লেইমটি অতীতে। নতুন টোকেন চান, অথবা refresh token দিয়ে রিফ্রেশ করুন। সময় ভুল মনে হলে ঘড়ির পার্থক্য বা মিলিসেকেন্ডে লেখা exp মান আছে কিনা দেখুন।JWT, JWS ও JWE-এর পার্থক্য কী?
alg “none” কেন বিপজ্জনক?
alg: none প্রত্যাখ্যান করতে হবে এবং শুধু প্রত্যাশিত নির্দিষ্ট অ্যালগরিদমই গ্রহণ করা উচিত।