ToolDeck

JWT Decoder

Decode and inspect JSON Web Tokens

একটি উদাহরণ চেষ্টা করুন

JWT Token

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ
এটাও ব্যবহার করুন:JWT Encoder

JWT (JSON Web Token) কী?

JSON Web Token (JWT) হলো RFC 7519-এ সংজ্ঞায়িত একটি সংক্ষিপ্ত, URL-safe টোকেন ফরম্যাট। এটি একটি JSON অবজেক্ট হিসেবে claims এনকোড করে, তারপর সাইন করে — এবং ঐচ্ছিকভাবে এনক্রিপ্ট করে — যাতে প্রাপক নিশ্চিত করতে পারেন যে ডেটায় কোনো পরিবর্তন হয়নি। REST API, single-sign-on সিস্টেম ও মাইক্রোসার্ভিস অথরাইজেশনে stateless প্রমাণীকরণের জন্য JWT হলো এখন ইন্ডাস্ট্রি স্ট্যান্ডার্ড।

RFC 7519 — JSON Web Token (JWT) →

JWT গঠন: Header · Payload · Signature

প্রতিটি JWT হলো তিনটি base64url-এনকোডেড অংশ যা ডট দিয়ে আলাদা করা। header ও payload হলো সাদামাটা JSON — যেকেউ পড়তে পারেন — আর signature হলো একটি ক্রিপ্টোগ্রাফিক মান যা শুধুমাত্র সঠিক key দিয়ে যাচাই করা যায়।

এনকোডেড টোকেন

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkFsaWNlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzE3MjAwMDAwLCJleHAiOjE3MTcyMDM2MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

HeaderPayloadSignature
Header
json
{
  "alg": "HS256",
  "typ": "JWT"
}
Payload
json
{
  "sub":  "user123",
  "name": "Alice",
  "role": "admin",
  "iat":  1717200000,
  "exp":  1717203600
}

JWT ডিকোডার কেন ব্যবহার করবেন?

কাঁচা JWT দেখতে এলোমেলো টেক্সটের মতো। এই টুলটি header ও payload কে তাৎক্ষণিকভাবে ফরম্যাটেড JSON হিসেবে প্রদর্শন করে, যাতে আপনি একটি লাইন কোড না লিখেই claims পরীক্ষা করতে, মেয়াদ শেষের সময় দেখতে এবং অ্যালগরিদমের পছন্দ যাচাই করতে পারেন।

🔍
তাৎক্ষণিক Claim পরীক্ষা
payload-এর প্রতিটি claim দেখুন — sub, iss, aud, exp, কাস্টম রোল, অনুমতি — একটি ক্লিকেই ফরম্যাটেড ও পাঠযোগ্য আকারে।
🔓
Secret Key প্রয়োজন নেই
header ও payload সর্বজনীন; শুধু signature-এর জন্য secret প্রয়োজন। এই টুলটি আপনার signing key ছাড়াই উভয়টি ডিকোড করে।
⏱️
মেয়াদ ও Timestamp বিশ্লেষণ
Unix timestamp (exp, iat, nbf) স্বয়ংক্রিয়ভাবে মানুষের পাঠযোগ্য তারিখে রূপান্তরিত হয়, যাতে আপনি তাৎক্ষণিকভাবে বুঝতে পারেন টোকেনের মেয়াদ শেষ হয়েছে কিনা।
🔒
সম্পূর্ণ ব্রাউজারে চলে
সবকিছু স্থানীয়ভাবে প্রক্রিয়া করা হয় — কোনো টোকেন ডেটা কোনো সার্ভারে পাঠানো হয় না। ডিবাগিংয়ের সময় প্রোডাকশন টোকেন ব্যবহারেও নিরাপদ।

স্ট্যান্ডার্ড JWT Claims রেফারেন্স

RFC 7519 সাতটি নিবন্ধিত claim নাম নির্ধারণ করে। এগুলো বাধ্যতামূলক নয়, তবে interoperability-র জন্য এগুলো ব্যবহার দৃঢ়ভাবে প্রস্তাবিত। payload-এ যেকোনো কাস্টম claim যোগ করা যায়।

Claimবিবরণধরন
issIssuerটোকেনটি কে ইস্যু করেছে তা চিহ্নিত করে — যেমন আপনার auth সার্ভারের URL বা অ্যাপ্লিকেশনের নাম।string
subSubjectJWT যে principal সম্পর্কে তা চিহ্নিত করে — সাধারণত একটি ব্যবহারকারী ID বা সার্ভিস অ্যাকাউন্ট।string
audAudienceউদ্দিষ্ট প্রাপকদের চিহ্নিত করে। গ্রহণকারী পক্ষকে অবশ্যই যাচাই করতে হবে যে এটি তাদের পরিচয়ের সাথে মিলে।string | string[]
expExpiration Timeএই Unix timestamp-এর পরে টোকেন গ্রহণযোগ্য নয়। চুরি হওয়া টোকেনের ক্ষতি সীমিত রাখতে এটি সর্বদা নির্ধারণ করুন।number
nbfNot Beforeএই Unix timestamp-এর আগে টোকেন গ্রহণযোগ্য নয়। ভবিষ্যৎ-তারিখের টোকেন নির্ধারণ করতে কার্যকর।number
iatIssued Atটোকেনটি কখন ইস্যু হয়েছিল সেই Unix timestamp। টোকেনের বয়স গণনা করতে ব্যবহৃত হয়।number
jtiJWT IDটোকেনের একটি অনন্য পরিচিতি। ব্যবহৃত JTI মান সার্ভার-সাইডে সংরক্ষণ ও যাচাই করে টোকেন বাতিল করা সম্ভব হয়।string

JWT সাইনিং অ্যালগরিদম

alg header claim জানায় কোন অ্যালগরিদম দিয়ে টোকেন সাইন করা হয়েছে। এই পছন্দ নিরাপত্তা, কার্যক্ষমতা এবং তৃতীয়-পক্ষের সার্ভিসগুলো private key ছাড়া টোকেন যাচাই করতে পারবে কিনা তা প্রভাবিত করে।

অ্যালগরিদমপরিবারKey-এর ধরননোট
HS256HMACSymmetricসবচেয়ে প্রচলিত। Shared secret — যার কাছে secret আছে সে সাইন ও যাচাই উভয়ই করতে পারে।
HS384HMACSymmetricশক্তিশালী HMAC ভেরিয়েন্ট; কার্যক্ষমতায় মাঝারি খরচ।
HS512HMACSymmetricসবচেয়ে শক্তিশালী HMAC ভেরিয়েন্ট।
RS256RSAAsymmetricসর্বাধিক ব্যবহৃত asymmetric অ্যালগরিদম (Google, Auth0, Okta)। Public key দিয়ে private key ছাড়াই যাচাই করা যায়।
RS384RSAAsymmetricউচ্চতর নিরাপত্তার RS ভেরিয়েন্ট।
RS512RSAAsymmetricসবচেয়ে শক্তিশালী RS ভেরিয়েন্ট।
ES256ECDSAAsymmetricElliptic curve — RSA-র চেয়ে ছোট signature, মোবাইল ও IoT-এ জনপ্রিয়।
PS256RSA-PSSAsymmetricRSA-PSS: PKCS1v1.5-ভিত্তিক RS256-এর চেয়ে আধুনিক ও নিরাপদ।
noneকোনো signature নেই — অত্যন্ত বিপজ্জনক। প্রোডাকশনে কখনো alg: none সহ টোকেন গ্রহণ করবেন না।

নিরাপত্তা বিবেচনা

JWT ডিকোড করা সবসময় নিরাপদ। সঠিক signature যাচাই ছাড়া JWT বিশ্বাস করা নিরাপদ নয়। আপনার অ্যাপ্লিকেশনে টোকেন ব্যবহার করার সময় এই নিয়মগুলো মাথায় রাখুন।

সর্বদা নিরাপদ
  • developer tools বা এই টুলে JWT ডিকোড ও পরীক্ষা করুন
  • টোকেনের আয়ু বোঝার জন্য exp, iat ও nbf ব্যবহার করুন
  • ডিবাগিংয়ের জন্য payload claims লগ করুন (সংবেদনশীল PII বাদ দিন)
  • টোকেন কীভাবে সাইন হয়েছে বুঝতে alg header পড়ুন
কখনো করবেন না
  • সার্ভার-সাইডে signature যাচাই ছাড়া payload-এর claims বিশ্বাস করুন
  • alg: none সহ টোকেন গ্রহণ করুন — এর মানে কোনো signature নেই
  • উচ্চ-নিরাপত্তার অ্যাপ্লিকেশনে localStorage-এ access token সংরক্ষণ করুন (httpOnly cookies পছন্দনীয়)
  • সংবেদনশীল অনুমতি বহনকারী টোকেনের জন্য exp অনেক দূর ভবিষ্যতে নির্ধারণ করুন

সাধারণ ব্যবহারের ক্ষেত্র

প্রমাণীকরণ প্রবাহ ডিবাগ করা
ব্রাউজারের network tab থেকে একটি টোকেন পেস্ট করুন এবং প্রোডাকশন কোড না ছুঁয়েই claims পরীক্ষা করুন, এমবেডেড রোল দেখুন ও মেয়াদ যাচাই করুন।
তৃতীয়-পক্ষের টোকেন পরীক্ষা করা
Google, Auth0, Okta বা Azure AD-এর টোকেন দ্রুত পড়ুন এবং দেখুন আপনার প্রোভাইডার কোন claims অন্তর্ভুক্ত করে এবং আপনার প্রত্যাশিত schema-র সাথে তুলনা করুন।
API ডেভেলপমেন্ট ও পরীক্ষা
API এন্ডপয়েন্ট লেখা বা পরীক্ষা করার সময়, authorization header ডিকোড করুন এবং নিশ্চিত করুন আপনার টোকেন-জেনারেশন লজিক সঠিক sub, aud ও scope মান নির্ধারণ করছে।
মাইক্রোসার্ভিস অথরাইজেশন
সার্ভিস মেশে, প্রতিটি সার্ভিস upstream caller-এর JWT যাচাই করে। টোকেন ডিকোড করে ট্রেস করুন কোন সার্ভিস টোকেন ইস্যু করেছে এবং কী অনুমতি দাবি করছে।
সাপোর্ট ও Incident Response
কোনো ব্যবহারকারী প্রমাণীকরণ ত্রুটি জানালে, তাদের টোকেন ডিকোড করুন এবং দেখুন মেয়াদ শেষ হয়েছে কিনা, audience ভুল কিনা, বা প্রয়োজনীয় কোনো claim অনুপস্থিত কিনা।
নিরাপত্তা নিরীক্ষা
অ্যালগরিদমের পছন্দ, মেয়াদ শেষের সময়সীমা এবং এনক্রিপ্ট না করা payload-এ সংবেদনশীল ডেটা ভুলবশত সংরক্ষিত হয়েছে কিনা তা পরীক্ষা করে সার্ভিসগুলোতে JWT ব্যবহার নিরীক্ষা করুন।

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

header ও payload হলো base64url-এনকোডেড — শুধু এনকোডিং উল্টো করুন। Base64url, + এর পরিবর্তে - এবং / এর পরিবর্তে _ ব্যবহার করে এবং = প্যাডিং বাদ দেয়। শুধু signature-এর জন্য secret key প্রয়োজন।

JavaScript (browser)
function decodeJWT(token) {
  const [, payload] = token.split('.')
  const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'))
  return JSON.parse(json)
}
Node.js
const [, payload] = token.split('.')
const decoded = JSON.parse(
  Buffer.from(payload, 'base64url').toString()
)
Python
import base64, json

def decode_jwt(token):
    payload = token.split('.')[1]
    padding = '=' * (-len(payload) % 4)
    return json.loads(base64.urlsafe_b64decode(payload + padding))
CLI (bash + jq)
TOKEN="eyJhbGc..."
echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .

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

secret key ছাড়া কি JWT ডিকোড করা যায়?
হ্যাঁ। JWT-এর header ও payload শুধুমাত্র base64url-এনকোডেড JSON — এনক্রিপ্টেড নয়। যেকেউ সেগুলো ডিকোড ও পড়তে পারেন। secret (বা RS/ES অ্যালগরিদমের জন্য private key) শুধুমাত্র signature যাচাই করতে প্রয়োজন, যা নিশ্চিত করে টোকেনে কোনো পরিবর্তন হয়নি।
JWT ডিকোড করা মানে কি signature যাচাই হয়ে যায়?
না। ডিকোড শুধু claims পড়ে। যাচাই একটি আলাদা ধাপ যা সঠিক key ব্যবহার করে ক্রিপ্টোগ্রাফিক signature পরীক্ষা করে। আপনার অ্যাপ্লিকেশনে কোনো claim বিশ্বাস করার আগে সবসময় signature যাচাই করুন।
HS256 ও RS256-এর মধ্যে পার্থক্য কী?
HS256 একটি একক symmetric secret ব্যবহার করে যা issuer ও verifier-এর মধ্যে ভাগ করা — যার কাছে secret আছে সে টোকেন তৈরি ও যাচাই উভয়ই করতে পারে। RS256 একটি asymmetric key pair ব্যবহার করে: private key সাইন করে, public key যাচাই করে। RS256-এ আপনি public key বিতরণ করতে পারেন যাতে বাহ্যিক সার্ভিসগুলো জাল করার ক্ষমতা ছাড়াই টোকেন যাচাই করতে পারে।
base64 ডিকোডিং কখনো কখনো কেন ব্যর্থ হয়?
JWT base64url এনকোডিং ব্যবহার করে, যা + এর পরিবর্তে - এবং / এর পরিবর্তে _ ব্যবহার করে এবং = প্যাডিং বর্ণ বাদ দেয়। স্ট্যান্ডার্ড base64 ডিকোডারের + ও / প্রয়োজন এবং প্যাডিং আবশ্যক হতে পারে। ম্যানুয়ালি ডিকোড করার আগে প্যাডিং যোগ করুন (= দিয়ে 4-এর গুণিতকে পূর্ণ করুন) এবং বর্ণগুলো বদলে নিন।
এই টুলে প্রোডাকশন JWT পেস্ট করা কি নিরাপদ?
হ্যাঁ — এই টুলটি সম্পূর্ণ আপনার ব্রাউজারে চলে এবং কোনো সার্ভারে ডেটা পাঠায় না। তবে, আপনার স্ক্রিন বা ব্রাউজার ইতিহাস কে দেখতে পাচ্ছেন সে বিষয়ে সচেতন থাকুন। অত্যন্ত সংবেদনশীল টোকেনের জন্য, পরিবর্তে আপনার টার্মিনালে স্থানীয়ভাবে ডিকোড করুন।
alg: none মানে কী এবং এটি কি বিপজ্জনক?
alg: none মানে টোকেনে কোনো ক্রিপ্টোগ্রাফিক signature নেই — যেকেউ মনগড়া claims সহ একটি টোকেন তৈরি করে alg: none নির্ধারণ করতে পারে। কিছু প্রাথমিক JWT লাইব্রেরি এই টোকেনগুলো গ্রহণ করত, যা একটি গুরুতর দুর্বলতা তৈরি করেছিল। একটি নিরাপদ JWT লাইব্রেরি সবসময় alg: none সহ টোকেন প্রত্যাখ্যান করে, যদি না স্পষ্টভাবে অন্যথা কনফিগার করা হয়। এই চেক কখনো নিষ্ক্রিয় করবেন না।