JSON Web Token کیا ہے؟
ایک JSON Web Token (JWT) ایک کمپیکٹ، URL-محفوظ لفافہ ہے جو ایک چھوٹے کلیمز پے لوڈ کو لے کر چلتا ہے۔ یہ سٹیٹ لیس ویب سیشنز، OAuth/OIDC ID ٹوکنز، مشین-سے-مشین API توثیق، اور دستخط شدہ میجک لنکس کے لیے معیاری اسناد فارمیٹ ہے۔ ایک JWT ہمیشہ تین base64url سیگمنٹس پر مشتمل ہوتا ہے جو نقطوں سے جوڑے گئے ہوں: header.payload.signature۔ ہیڈر اور پے لوڈ JSON ہوتے ہیں؛ دستخط پہلے دو سیگمنٹس پر ایک بائنری MAC یا ڈیجیٹل دستخط ہوتا ہے۔
JWTs کیسے کام کرتے ہیں؟
جب یہ ٹول کسی ٹوکن کو ڈی کوڈ کرتا ہے تو وہ وہی تین-قدمی راستہ اختیار کرتا ہے جو ہر JWT لائبریری اپناتی ہے:
- ٹوکن کو نقطوں پر بالکل تین غیر-خالی سیگمنٹس میں تقسیم کریں۔ کوئی بھی دوسری شکل بد ساخت ہے۔
- سیگمنٹ 0 اور 1 کو Base64url-ڈی کوڈ کریں، پھر ہر ایک پر
JSON.parseچلائیں۔ ہیڈر الگورتھم (alg) اور ٹوکن کی قسم (typ) لے کر چلتا ہے۔ پے لوڈ کلیمز (sub،exp،iat، اور حسبِ ضرورت کیز) لے کر چلتا ہے۔ - اگر سیکریٹ فراہم کیا جائے تو ہیڈر میں موجود الگورتھم کا استعمال کرتے ہوئے
<segment0>.<segment1>پر MAC دوبارہ شمار کریں۔ بائٹس کا تیسرے سیگمنٹ کے ساتھ موازنہ کریں۔ - تصدیق کے نتیجے کو ڈی کوڈ شدہ کلیمز کے ساتھ سامنے لائیں، جس میں
expکلیم سے شمار کیا گیا انسان-پڑھنے کے قابل میعاد ختم ہونے کا اشارہ بھی شامل ہے۔
براؤزر میں JWTs کو کیوں ڈیکوڈ کریں؟
کسی حقیقی، زیرِ استعمال JWT کو ریموٹ ڈیبگر میں پیسٹ کرنا اُن اسناد کو اُس سروس کے لاگز، آبزرویبلٹی اسٹیک، اور کسی بھی پارٹنر کو لیک کر دیتا ہے جس کے ساتھ سروس ڈیٹا شیئر کرتی ہے۔ چاہے تھرڈ پارٹی سائٹ یہ دعویٰ بھی کرے کہ وہ ٹوکنز لاگ نہیں کرتی، آپ کے پاس اِس کی تصدیق کا کوئی ذریعہ نہیں ہے۔ یہ ٹول اسی لیے بنایا گیا کہ آپ کو کبھی یہ سمجھوتہ نہ کرنا پڑے:
- صفر نیٹ ورک: رن ٹائم میں کوئی
fetch،XMLHttpRequestیاsendBeaconکال نہیں ہے۔ ڈی کوڈ اور تصدیق کے دوران DevTools کھولیں — نیٹ ورک پینل خاموش رہے گا۔ - نیٹِو Web Crypto: HMAC تصدیق
crypto.subtle.importKeyاورcrypto.subtle.signاستعمال کرتی ہے، یعنی وہی پرائمیٹوز جنہیں آپ کا رن ٹائم خود بھی بلاتا ہے۔ - سٹیٹک ڈیپلائے: ہر صفحہ ایک واحد سٹیٹک HTML فائل ہے جس کا کوئی سرور اینڈ پوائنٹ سمجھوتے کے لیے موجود نہیں۔ کوئی ٹوکن لیک ہونے کا امکان نہیں کیونکہ لیک ہونے کے لیے کوئی سرور ہی نہیں ہے۔
یہ ٹول کیا ویریفائی کرتا ہے اور کیا نہیں؟
اس ٹول کا ورژن 1 صرف HMAC-SHA خاندان کے دستخطوں کی تصدیق کرتا ہے۔ تفصیل سے:
- سپورٹ شدہ: HS256، HS384، HS512۔ مشترکہ سیکریٹ فراہم کریں اور ٹول MAC کو دوبارہ شمار کر کے موازنہ کر دے گا۔
- ابھی سپورٹ شدہ نہیں: RS256/384/512 (RSA)، ES256/384/512 (ECDSA)، EdDSA، اور PS256/384/512 (RSA-PSS)۔ یہ PEM یا JWK شکل میں پبلک کی درکار ہوتی ہیں اور انہیں جان بوجھ کر آئندہ ریلیز کے لیے موخر کر دیا گیا ہے۔
- مسترد:
alg: "none"۔ ٹول ٹوکن کو ڈی کوڈ تو کرتا ہے مگر اسے واضح طور پر غیر محفوظ قرار دیتا ہے — کوئی دستخط کی توثیق نہیں ہو رہی، اور کوئی بھی پروڈکشن سسٹم جو ایسا ٹوکن قبول کرے ایک سنگین کمزوری کا شکار ہے۔
JWT ڈیکوڈنگ کی مثال کیسی دکھتی ہے؟
اوپر دیے گئے ان پٹ فیلڈ میں RFC 7519 کا کلاسیکی مثالی ٹوکن پیسٹ کریں:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
ہیڈر ڈی کوڈ ہو کر {"alg":"HS256","typ":"JWT"} بنتا ہے اور پے لوڈ {"sub":"1234567890","name":"John Doe","iat":1516239022} بنتا ہے۔ تصدیق پینل میں your-256-bit-secret درج کریں اور دستخط کا چیک درست واپس کرے گا۔ سیکریٹ کا کوئی ایک حرف بدل دیں اور یہ غلط واپس کرے گا۔ یہ سب کچھ آپ کے براؤزر سے باہر نہیں جاتا۔
یہ وہی JWT ڈی کوڈر ہے جس کی ہمیں خواہش تھی جب ہمیں پروڈکشن میں کسی ٹوکن کو ڈیبگ کرنا تھا: رازداری کا احترام کرنے والا، تیز، اور اُنہی پرائمیٹوز پر بنایا گیا جنہیں رن ٹائم خود استعمال کرتا ہے۔