JWT এনকোডার / ডিকোডার
টোকেন পেস্ট করে হেডার ও পেলোড পড়ুন, বা নিজের ক্লেইম থেকে একটি টোকেন স্বাক্ষর করুন — কোনো বোতাম নেই, আপলোড নেই।
ডিকোডের সময় ঐচ্ছিক (যাচাই করতে পূরণ করুন), স্বাক্ষরের জন্য আবশ্যক।
সিগনেচার:
টোকেন
হেডার
পেলোড
কীভাবে ব্যবহার করবেন
- টোকেন পেস্ট করুন: হেডার ও পেলোড সঙ্গে সঙ্গেই দেখা যায়, কোনো বোতাম চাপতে হয় না। টোকেন থেকে যা এসেছে তা হুবহু যেমন স্বাক্ষরিত ছিল তেমনই থাকে — ইনপুট কখনো বদলানো হয় না।
- সিগনেচার যাচাই করতে ইনপুটের নিচে সিক্রেট দিন। সেটি খালি রাখার মানেই “যাচাই করা হয়নি”: ক্লেইমগুলো তবুও যেমন আছে তেমনই পড়া যাবে।
- Encode মোডে গিয়ে JSON-এ নিজের ক্লেইম লিখুন, HS256/384/512 ও একটি সিক্রেট বেছে নিন, তারপর আউটপুটের টোকেনটি কপি করুন। মোড বদলালে আপনি যা লিখেছেন তা মোছা হয় না।
- স্ট্যান্ডার্ড exp / iat / nbf ক্লেইম আপনার নিজের ভাষা ও টাইম জোনে স্পষ্টভাবে দেখানো হয়, মেয়াদোত্তীর্ণ এবং এখনো-বৈধ-নয় চিহ্নসহ।
উদাহরণ
টোকেন
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTEwMjQiLCJuYW1lIjoiSmFuZSBDb29wZXIiLCJyb2xlIjoiZWRpdG9yIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6MTc5ODc2MTYwMH0.jCqliF6m-TAglXcHrjuXj7kYIjjsRO7kv6_8O1yb_7Q
হেডার ও পেলোড
Header
{
"alg": "HS256",
"typ": "JWT"
}
Payload
{
"sub": "u-1024",
"name": "Jane Cooper",
"role": "editor",
"iss": "https://api.example.com",
"iat": 1767225600,
"exp": 1798761600
}এটি “dev-secret-change-me” সিক্রেট দিয়ে স্বাক্ষরিত; Secret ঘরে সেটি লিখলেই স্ট্যাটাস লাইন বদলে “Signature verified” হয়ে যাবে। Encode মোডে গিয়ে Sample চাপলেই একই পেলোড পাবেন: একই সিক্রেট দিয়ে এই টোকেনটি হুবহু, অক্ষরে অক্ষরে, আবার তৈরি হয়।
নিয়ম, সীমাবদ্ধতা ও পরিচিত সমস্যা
- শুধু HS256, HS384 ও HS512 সাপোর্ট করা হয় — স্বাক্ষর করতে এবং যাচাই করতে। RS*, ES* ও PS* টোকেন ডিকোড করে যেমন আছে তেমনই দেখানো হয়, তবে তাদের সিগনেচার কখনো চেক করা হয় না — তার জন্য পাবলিক কী দরকার, তাই স্ট্যাটাস লাইনে সেটি স্পষ্টভাবে বলা হয়, অনুমান করা হয় না।
- স্বাক্ষরবিহীন টোকেন (alg: none) ডিকোড হয় এবং স্পষ্টভাবে চিহ্নিত করা হয়, কিন্তু কখনো তৈরি করা হয় না: সিক্রেট ছাড়া স্বাক্ষর করতে চাইলে স্বাক্ষরবিহীন টোকেনের বদলে এরর দেখায়।
- এনকোডিং-এর সময় হেডার টুল নিজেই তৈরি করে (`{"alg": … ,"typ": "JWT"}`)। kid, jku, x5c বা cty-এর মতো হেডার ফিল্ড বহন করা হয় না — এই টুল ক্লেইম স্বাক্ষর করে, সার্টিফিকেট চেইন নয়।
- স্বাক্ষরের আগে আপনার ক্লেইম JSON সংক্ষেপে পুনঃসিরিয়ালাইজ করা হয়, তাই ইন্ডেন্টেশন ও কমেন্ট টোকেনে ঢোকে না। কী-এর ক্রম JavaScript অবজেক্ট অনুসরণ করে: একই কী বারবার থাকলে শেষেরটি থেকে যায়, আর সংখ্যার মতো দেখতে কী-গুলো সামনে চলে যায়।
- অতি বড় পূর্ণসংখ্যার নির্ভুলতা কমে যায় — `12345678901234567890` গোলাকরে ফিরে আসে, কারণ JavaScript সংখ্যায় তা-ই হয়। কিছুই চুপচাপ ঠিক করা হয় না; অঙ্ক নিখুঁত হতে হলে স্ট্রিং ব্যবহার করুন।
- ক্লেইমগুলো পড়ার সুবিধার্থে ইন্ডেন্ট করে দেখানো হয়, আর সিগনেচার টোকেনে হুবহু যেমন আছে এমন raw সেগমেন্টের ওপরই বসে। আপনার অজান্তে কিছুই পুনরায় এনকোড করা হয় না, তাই এখানে যে টোকেন যাচাই হয় আপনার নিজের কোডেও তা যাচাই হবে।
- Base64url নিয়ে কঠোর নিয়ম: `+`, `/` ও `=` চুপচাপ মেনে নেওয়ার বদলে এরর হিসেবে দেখানো হয়, আর UTF-8 নয় এমন বাইট প্রতিস্থাপন ক্যারেক্টার বসানোর বদলে রিপোর্ট করা হয়। পেস্ট করা টোকেনের স্পেস উপেক্ষা করা হয়, কারণ টোকেনে কখনো স্পেস থাকে না।
- এনক্রিপ্টেড JWE (পাঁচটি অংশ) ডিক্রিপ্ট করা হয় না — যা পেস্ট করেছেন সেটিই জানিয়ে দেওয়া হয়।
- সাইজ সীমা 10,000 অক্ষর। কিছুই আপলোড, সংরক্ষণ, URL-এ লেখা বা শেয়ার হয় না: শেয়ার বোতাম শুধু এই পেজের ঠিকানা শেয়ার করে, আপনার টোকেন বা সিক্রেট কখনো নয়।
সম্পর্কিত টুল
ক্লেইম পড়ে নেওয়ার পর সাধারণত এগুলোই পরবর্তী পদক্ষেপ।