JWT Decoder

JWT ডিকোডার / এনকোডার

যেকোনো JSON Web Token ডিকোড করে এর হেডার, পেলোড ও সিগনেচার দেখুন — অথবা HS256/384/512 দিয়ে একটি নতুন টোকেন সাইন করুন। HMAC সিগনেচার লোকালি ভেরিফাই হয়। ১০০% আপনার ব্রাউজারে।

JWT ডিকোডার / এনকোডার — TL;DR

যেকোনো JSON Web Token ডিকোড করে এর হেডার, পেলোড ও সিগনেচার দেখুন — অথবা HS256/384/512 দিয়ে একটি নতুন টোকেন সাইন করুন। HMAC সিগনেচার লোকালি ভেরিফাই হয়। ১০০% আপনার ব্রাউজারে।

না। পুরো টুলটি এই পেজের ভেতরে JavaScript। একটি টোকেন পেস্ট করুন, ডিকোড আপনার ব্রাউজারে ঘটে, বাইটগুলি কখনই ট্যাব ছেড়ে যায় না। DevTools → Network খুলে দেখুন — ডিকোড বা ভেরিফাই করার সময় কোনো রিকোয়েস্ট পাঠানো হয় না। এজন্য এটি আসল কাস্টমার বা প্রোডাকশন টোকেন পেস্ট করার জন্য নিরাপদ।

এটি প্রমাণ করে যে টোকেনটি সিক্রেট (HMAC) বা প্রাইভেট কী (RSA/ECDSA) ধারণকারী কেউ সাইন করেছে। এটি পেলোড এনক্রিপ্ট করে না — হেডার ও পেলোড শুধুমাত্র base64url-এনকোডেড JSON, টোকেনধারী যে কেউ সেগুলি পড়তে পারে। সিগনেচার শুধু টেম্পারিং থামায়: পেলোডের একটি বাইট পরিবর্তন করলেই সিগনেচার আর মেলে না।

একটি JWT প্রায়ই ইউজার আইডি, ইমেইল, স্কোপ এবং কখনও কখনও সেশন কুকির সমতুল্য বহন করে — ঠিক সেই ডেটা যা আপনাকে একজন অপরিচিতের সার্ভারে পেস্ট করা উচিত নয়। iKit-এর ডিকোডার আপনার ব্রাউজার ট্যাবে ইতিমধ্যে লোডকৃত JavaScript হিসেবে চলে। DevTools → Network-এ যাচাইযোগ্য: ডিকোড বা ভেরিফাইয়ের সময় কোনো fetch নেই, কোনো XHR নেই, কোনো beacon নেই।

হেডার

পেলোড

সিগনেচার

স্ট্যান্ডার্ড ক্লেইম


            

HMAC সিগনেচার ভেরিফাই করুন

HS256/384/512 টোকেনের জন্য, সিগনেচার লোকালি ভেরিফাই করতে সাইনিং সিক্রেট লিখুন। RS256/ES256 (RSA/ECDSA)-এর জন্য সার্ভার-সাইড লাইব্রেরি ব্যবহার করুন — পাবলিক-কী ভেরিফিকেশনের জন্য PEM ফাইল প্রয়োজন যা আমরা এখানে গ্রহণ করি না।

কেন iKit JWT ডিকোডার

JWT ডিবাগ করার দ্রুততম উপায় — কোনো আপলোড নেই, কোনো সাইনআপ নেই, আপনার ও আপনার টোকেনের মাঝে কোনো তৃতীয় পক্ষ নেই।

তিনটি প্যান, একটি পেস্ট

একটি JWT পেস্ট করুন, ডিকোডেড হেডার, পেলোড ও সিগনেচার পাশাপাশি দেখুন। স্ট্যান্ডার্ড ক্লেইম (iss, sub, aud, exp, iat) টাইমস্ট্যাম্প ও লেবেল করা থাকে।

লোকাল HMAC ভেরিফিকেশন

HS256/384/512 টোকেনের জন্য, ব্রাউজারের Web Crypto API ব্যবহার করে সিগনেচার ভেরিফাই করতে সিক্রেট লিখুন। সিক্রেট কখনই আপনার ট্যাব ছেড়ে যায় না।

নিজের টোকেন সাইন করুন

Encode মোডে যান, হেডার ও পেলোড JSON হিসেবে এডিট করুন, অ্যালগরিদম বাছুন, একটি সিক্রেট লিখুন এবং তাৎক্ষণিকভাবে একটি সাইনড টোকেন পান।

ডিজাইন থেকেই গোপনীয়তা

JWT পেলোডে ইউজার আইডি, ইমেইল, কখনও কখনও স্কোপ থাকে — কখনই সেগুলি কোনো সার্ভার টুলে পেস্ট করবেন না। iKit-এর ডিকোডার আপনার ব্রাউজারে JavaScript হিসেবে চলে। DevTools → Network-এ যাচাইযোগ্য।

মেয়াদ সম্পর্কে সতর্কতা

exp, nbf, iat-এর মতো স্ট্যান্ডার্ড ক্লেইম মানুষ-পঠনযোগ্য তারিখ এবং স্পষ্ট EXPIRED / valid ব্যাজ সহ হাইলাইট করা হয় যাতে এক নজরেই বুঝতে পারেন টোকেনটি এখনও ভালো কিনা।

ওপেন স্ট্যান্ডার্ড, ওপেন কোড

ব্রাউজারের নেটিভ Web Crypto API ও JSON পার্সারের উপর তৈরি — OpenSSL, libjwt, jose-এর মতোই একই অ্যালগরিদম। আচরণ প্রতিটি আধুনিক JWT লাইব্রেরির সাথে মেলে।

JWT ডিকোডিং আসলে কীভাবে কাজ করে

একটি JWT হল ডট দ্বারা পৃথক তিনটি base64url-এনকোডেড JSON সেগমেন্ট — ব্যাস এটুকুই।

  1. 1

    দুটি ডটে ভাগ করুন

    একটি JWT দেখতে aaa.bbb.ccc-এর মতো। আমরা দুটি লিটারাল ডটে ভাগ করি, এনকোডেড হেডার, পেলোড ও সিগনেচার পাই। যদি ঠিক তিনটি অংশ না পাই, টোকেনটি ত্রুটিপূর্ণ।

  2. 2

    প্রতিটি অংশ Base64URL-ডিকোড করুন

    হেডার ও পেলোড base64url-এনকোডেড UTF-8 JSON। Base64URL = Base64 যেখানে +//=-এর পরিবর্তে -/_ এবং কোনো প্যাডিং নেই। ক্যারেক্টার ফিরিয়ে এনে আমরা atob করি, তারপর ফলাফল স্ট্রিংকে JSON.parse করি।

  3. 3

    স্ট্রাকচার সহ রেন্ডার করুন

    হেডার আমাদের অ্যালগরিদম (alg: HS256, RS256, ইত্যাদি) এবং টাইপ জানায়। পেলোডে ক্লেইম থাকে — স্ট্যান্ডার্ডগুলি (iss, sub, aud, exp, iat, nbf, jti) এবং যেকোনো কাস্টম ফিল্ড। আমরা প্রতিটিকে একটি লেবেলযুক্ত সেকশনে দেখাই।

  4. 4

    ভেরিফাই করুন (শুধু HMAC)

    HS256/384/512-এর জন্য, আপনি যে সিক্রেট লিখেছেন তা ব্যবহার করে আমরা header.payload-এর HMAC পুনর্গণনা করি এবং তৃতীয় সেগমেন্টের সিগনেচারের সাথে তুলনা করি। base64url-এনকোডেড HMAC(SHA-256, secret, signing_input)-এর মতো। মিল = সিগনেচার বৈধ।

সাধারণ JWT ডিবাগিং কাজ

প্রকৃত পরিস্থিতি যেখানে আপনি একটি JWT ডিকোডারের কাছে পৌঁছাবেন।

আপনার অথ প্রোভাইডার থেকে একটি টোকেন পরিদর্শন

Auth0, Firebase, Keycloak, AWS Cognito সবাই লগইনের পর JWT রিটার্ন করে। access_token পেস্ট করে দেখুন আপনার অ্যাপ আসলে কী ক্লেইম পাচ্ছে — ইউজার আইডি কী, কী স্কোপ, কখন মেয়াদ শেষ হয়?

৪০১ Unauthorized ডিবাগ করা

API আপনার রিকোয়েস্ট প্রত্যাখ্যান করছে? টোকেন ডিকোড করে চেক করুন: এর মেয়াদ কি শেষ (exp অতীতে)? অডিয়েন্স ক্লেইম (aud) কি API যা প্রত্যাশা করে? ইস্যুকারী (iss) কি সঠিক টেন্যান্ট?

একটি ওয়েবহুক সিগনেচার ভেরিফাই করা

Stripe, GitHub Apps, Slack JWT হিসেবে সাইন করা ওয়েবহুক পেলোড পাঠায়। একটি গ্রহণ করার পর, এটিকে শেয়ারড সিক্রেটসহ Decode মোডে পেস্ট করে নিশ্চিত করুন রিকোয়েস্টটি আসলেই তাদের কাছ থেকে এসেছে।

টেস্ট টোকেন তৈরি করা

একটি ইন্টিগ্রেশন টেস্টের জন্য একটি নতুন সাইনড JWT প্রয়োজন? Encode মোডে যান, পেলোড এডিট করুন (কাস্টম ইউজার আইডি, কাস্টম মেয়াদ), HS256 + আপনার টেস্ট সিক্রেট বাছুন, মিলিসেকেন্ডে একটি টোকেন পান। কোনো ব্যাকএন্ড রাউন্ড-ট্রিপ নেই।

কেন লোকাল JWT ডিকোডিং গুরুত্বপূর্ণ

একটি JWT প্রায়ই ইউজার আইডি, ইমেইল, স্কোপ এবং কখনও কখনও সেশন কুকির সমতুল্য বহন করে — ঠিক সেই ডেটা যা আপনাকে একজন অপরিচিতের সার্ভারে পেস্ট করা উচিত নয়। iKit-এর ডিকোডার আপনার ব্রাউজার ট্যাবে ইতিমধ্যে লোডকৃত JavaScript হিসেবে চলে। DevTools → Network-এ যাচাইযোগ্য: ডিকোড বা ভেরিফাইয়ের সময় কোনো fetch নেই, কোনো XHR নেই, কোনো beacon নেই।

  • ডিকোড বা ভেরিফাইয়ের সময় শূন্য নেটওয়ার্ক রিকোয়েস্ট — DevTools-এ যাচাইযোগ্য।
  • ভেরিফিকেশনের জন্য আপনি যে সিক্রেট লেখেন তা ব্রাউজার মেমরিতে থাকে এবং Clear / refresh-এ মুছে যায়।
  • প্রোডাকশন টোকেন, কাস্টমার অ্যাক্সেস টোকেন এবং ওয়েবহুক সিক্রেটের জন্য নিরাপদ।

সম্পর্কিত গাইড

iKit ব্লগ থেকে গভীর টিউটোরিয়াল এবং টুল তুলনা।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

এটি কি নিরাপদ? আমার JWT কি আপলোড হয়?

না। পুরো টুলটি এই পেজের ভেতরে JavaScript। একটি টোকেন পেস্ট করুন, ডিকোড আপনার ব্রাউজারে ঘটে, বাইটগুলি কখনই ট্যাব ছেড়ে যায় না। DevTools → Network খুলে দেখুন — ডিকোড বা ভেরিফাই করার সময় কোনো রিকোয়েস্ট পাঠানো হয় না। এজন্য এটি আসল কাস্টমার বা প্রোডাকশন টোকেন পেস্ট করার জন্য নিরাপদ।

JWT সিগনেচার আসলে কী ভেরিফাই করে?

এটি প্রমাণ করে যে টোকেনটি সিক্রেট (HMAC) বা প্রাইভেট কী (RSA/ECDSA) ধারণকারী কেউ সাইন করেছে। এটি পেলোড এনক্রিপ্ট করে না — হেডার ও পেলোড শুধুমাত্র base64url-এনকোডেড JSON, টোকেনধারী যে কেউ সেগুলি পড়তে পারে। সিগনেচার শুধু টেম্পারিং থামায়: পেলোডের একটি বাইট পরিবর্তন করলেই সিগনেচার আর মেলে না।

আমার ডিকোডেড পেলোড ঠিক দেখাচ্ছে কিন্তু ভেরিফিকেশন ব্যর্থ হয় কেন?

তিনটি সাধারণ কারণ: (১) ভুল সিক্রেট — JWT সিক্রেট কেস-সেন্সিটিভ এবং যেকোনো হোয়াইটস্পেস অমিল ভেরিফিকেশন ভেঙে দেয়। (২) অ্যালগরিদম মিল না হওয়া — হেডারে HS256 আছে কিন্তু সিক্রেট মূলত HS512-এ ব্যবহার করা হয়েছিল। (৩) সাইন করার পর টোকেন পরিবর্তিত হয়েছে — এক বাইটও সিগনেচার ভেঙে দেয়। হেডারের alg আপনার প্রত্যাশার সাথে মেলে কিনা চেক করুন।

RS256, ES256 এবং অন্যান্য পাবলিক-কী অ্যালগরিদম সম্পর্কে কী?

iKit বর্তমানে শুধুমাত্র HMAC ভেরিফিকেশন (HS256/384/512) সাপোর্ট করে। RS256 ও ES256 পাবলিক-কী ক্রিপ্টোগ্রাফি ব্যবহার করে — ভেরিফিকেশনের জন্য PEM ফরম্যাটে ইস্যুকারীর পাবলিক কী প্রয়োজন, যা আরও জটিল UI। আপাতত, ডিকোডিং কাজ করে (হেডার/পেলোড/সিগনেচার অংশ সঠিকভাবে দেখায়), কিন্তু Verify বোতাম আপনাকে জানাবে এটি অসমর্থিত। RSA/ECDSA ভেরিফিকেশন পরিকল্পিত আছে।

এটি jwt.io থেকে কীভাবে আলাদা?

একই ধারণা, ভিন্ন ডিফল্ট। iKit-এর ডিকোডার পুরোপুরি আপনার ব্রাউজারে চলে (jwt.io-ও তাই করে, কিন্তু iKit-এর কোড view-source-এ দেখা যায় এবং আমাদের ডোমেইনে কোনো তৃতীয়-পক্ষ ট্র্যাকার নেই)। আমরা exp ক্লেইমের জন্য একটি স্পষ্ট EXPIRED / valid ব্যাজ, স্ট্রাকচার্ড ক্লেইম নোট (iat / nbf / iss / sub / aud / jti পঠনযোগ্য সারি হিসেবে), এবং একটি copy-everything-decoded বোতাম যোগ করেছি যা বাগ রিপোর্টে পেস্ট করার জন্য সম্পূর্ণ স্ট্রাকচার্ড আউটপুট দেয়।