JWT ڈیکوڈ کریں
JSON Web Token کا ہیڈر، کلیمز اور میعاد دیکھیں۔ ٹوکن ایک کام کرتا ہوا کریڈینشل ہے، اس لیے یہاں کچھ بھی نہ کہیں بھیجا جاتا ہے نہ کبھی محفوظ کیا جاتا ہے۔
- کبھی محفوظ نہیں کی جاتی
- نہ قطار، نہ انتظار
- نہ سائن اپ، نہ واٹر مارک
آپ کا ٹوکن کبھی اس صفحے سے باہر نہیں جاتا۔ اسے یہیں ڈیکوڈ کیا جاتا ہے، کسی سرور کو کوئی درخواست بھیجے بغیر — اور یہ اہم ہے، کیونکہ JWT عموماً ایک کارآمد کریڈینشل ہوتا ہے۔ صفحہ لوڈ ہونے کے بعد اپنا Wi-Fi بند کر دیں، یہ پھر بھی ڈیکوڈ ہو گا: کچھ بھی نہیں بھیجا جاتا۔
شروع میں “Bearer ” ہو تو کوئی مسئلہ نہیں — اسے نظر انداز کر دیا جاتا ہے۔
یہ کیسے کام کرتا ہے
ٹوکن پیسٹ کریں
شروع میں “Bearer ” ہو یا نہ ہو۔ یہ اسی صفحے میں رہتا ہے؛ کوئی ریکوئسٹ نہیں کی جاتی۔
تینوں حصے پڑھیں
ہیڈر، پے لوڈ اور دستخط، ہر ایک ڈیکوڈ اور فارمیٹ شدہ۔ ٹائم اسٹیمپس اصل تاریخیں بن جاتے ہیں اور آپ کو بتایا جاتا ہے کہ کتنا وقت باقی ہے۔
وارننگز دیکھیں
میعاد ختم ٹوکنز، غائب میعاد، “none” الگورتھم اور دوسرے مسائل ان کے مطلب کے ساتھ نمایاں کیے جاتے ہیں۔
کیا چیک کیا جاتا ہے، اور کیا صرف پڑھا جاتا ہے
اس صفحے پر دو تاریخی موازنوں کے سوا سب کچھ محض نقل ہے۔ ہیڈر اور پے لوڈ Base64URL سے ڈیکوڈ کر کے دکھائے جاتے ہیں؛ دستخط کو صرف کاپی کیا جاتا ہے اور کبھی چھیڑا نہیں جاتا، کیونکہ یہاں کوئی کی نہیں اور کوئی کرپٹوگرافی چلتی ہی نہیں۔ صفحہ جو دو فیصلے کرتا ہے وہ آپ کے اپنے ڈیوائس کی گھڑی کے مقابلے میں حساب ہیں — میعاد والا کلیم ابھی کے وقت سے، اور not-before والا کلیم ابھی کے وقت سے۔ گھڑی کے فرق (clock skew) کی کوئی گنجائش نہیں رکھی جاتی، جبکہ یہی ٹوکن چیک کرنے والا سرور عموماً ایک دو منٹ کی گنجائش دیتا ہے۔ جو لیپ ٹاپ پانچ منٹ آگے چل رہا ہو وہ ایک فعال ٹوکن کو میعاد ختم دکھائے گا، اور ٹوکن بالکل ٹھیک ہو گا۔
پارسنگ کی دو تفصیلات طے کرتی ہیں کہ آپ اصل میں کیا دیکھتے ہیں۔ وقت والے کلیمز صرف اسی صورت میں پڑھے جاتے ہیں جب وہ JSON نمبرز کے طور پر آئیں: جس ٹوکن کی میعاد اسٹرنگ "1699999999" کے طور پر لکھی گئی ہو اسے بغیر میعاد کا سمجھا جاتا ہے، اور اسے وہ وارننگ ملتی ہے کہ اس کی میعاد خود کبھی ختم نہیں ہو گی — جو حقیقت کے الٹ ہے۔ اور پے لوڈ کو براؤزر کے اپنے JSON پارسر سے پارس کیا جاتا ہے، ہمارے JSON ٹولز والے ہندسے محفوظ رکھنے والے پارسر سے نہیں، اس لیے 64-bit عددی کلیم، جیسے subject میں snowflake یوزر ID، آخری ہندسے راؤنڈ ہو کر دکھایا جاتا ہے۔ JWT میں شناخت کنندگان عموماً اسی وجہ سے اسٹرنگز ہوتے ہیں؛ جب کوئی نہ ہو تو اسے کلیمز ٹیبل کے بجائے خام پے لوڈ سے پڑھیں۔
پانچ حصوں والے ٹوکن کو انکرپٹڈ JWE کہہ کر رد کر دیا جاتا ہے، اور یہ فیصلہ ہیڈر پڑھ کر نہیں بلکہ صرف حصوں کی گنتی سے ہوتا ہے — عملاً درست، اور یہ جاننا مفید ہے کہ یہ ایک شارٹ کٹ ہے۔ جو تین حصوں کا نہ ہو اسے سیدھا رد کر دیا جاتا ہے، اور اسی طرح وہ پے لوڈ بھی جو آبجیکٹ کے بجائے JSON array یا اکیلی اسٹرنگ میں ڈیکوڈ ہو۔ وارننگز “none” الگورتھم کے لیے اور HS فیملی کے لیے دی جاتی ہیں، جہاں سائننگ کی پبلک نہیں بلکہ مشترکہ سیکرٹ ہوتی ہے۔ RS، ES یا PS سے سائن کیے گئے ٹوکنز پر کوئی وارننگ نہیں آتی، اس لیے اس صفحے کی خاموشی کا مطلب کسی معلوم خراب شکل کی عدم موجودگی ہے، منظوری نہیں۔
جب آپ کو کچھ اور چاہیے
یہاں کچھ بھی محفوظ نہیں کیا جاتا، اور یہی واحد وجہ ہے کہ یہ صفحہ معقول طور پر موجود ہو سکتا ہے — پھر بھی یہ اپنانے والی عادت نہیں۔ پرائیویسی کے دعوے کو پڑھ کر نہیں پرکھا جا سکتا: صفحہ لوڈ ہونے کے بعد انٹرنیٹ بند کریں اور ڈیکوڈر کو کام کرتے دیکھیں، جو کوئی ایسا ٹول بالکل نہیں کر سکتا جس کے پیچھے سرور ہو۔ اور اگر آپ نے کسی ایسی جگہ ٹوکن پیسٹ کیا ہے جس کی جانچ آپ نہیں کر سکتے اور وہ اب بھی درست ہے، تو اس پر سوچنے کے بجائے اسے بدل دیں (rotate کریں)۔ بدلنا ایک منٹ کا کام ہے۔ دوسرا راستہ ایک ایسے کریڈینشل کے بارے میں اپنے آپ سے لمبی بحث ہے جو اب بھی دروازہ کھولتا ہے۔ ٹوکن کو ٹیب کے بجائے مشین پر پڑھنے کے لیے پے لوڈ ایک شیل لائن ہے: نقطوں سے الگ دوسرا حصہ cut کریں، اس پر base64 -d چلائیں، اور اسے jq سے گزاریں۔
جب سوال یہ ہو کہ ٹوکن اصلی ہے یا نہیں، نہ کہ وہ کیا کہتا ہے، تو یہ صفحہ اپنی ساخت ہی سے غلط جگہ ہے، اور ہر دوسرا آن لائن ڈیکوڈر بھی۔ تصدیق وہاں ہونی چاہیے جہاں کی پہلے سے موجود ہے — آپ کے سرور پر آپ کی زبان کی اپنی JWT لائبریری، جاری کرنے والے کے شائع کردہ JWKS کے مقابلے میں۔ یہ چند لائنیں ہیں، یہی واحد جواب ہے جس کا کوئی مطلب ہے، اور جو سائٹ آپ کے لیے یہ کرنے کی پیشکش کرے وہ وہی ایک راز مانگ رہی ہے جو آپ کو کبھی کسی ویب سائٹ کو نہیں دینا چاہیے۔
اکثر پوچھے جانے والے سوالات
کیا میرا ٹوکن کہیں بھیجا جاتا ہے؟
نہیں — اور اس صفحے کے لیے یہ کوئی خصوصیت نہیں بلکہ اس کا پورا مقصد ہے۔ JWT عموماً ایک فعال کریڈینشل ہوتا ہے: جس کے پاس یہ ہو وہ اس کی میعاد ختم ہونے تک آپ بن کر کام کر سکتا ہے۔ اسے کسی ایسے آن لائن ڈیکوڈر میں پیسٹ کرنا جو اسے سرور پر بھیج دے، ایک کام کرتی ہوئی چابی حوالے کرنا ہے، اور لاگ نہ کرنے کا کوئی وعدہ اسے واپس نہیں لے سکتا۔ یہ ڈیکوڈر اسی صفحے میں موجود سادہ JavaScript ہے جسے آپ دیکھ رہے ہیں۔ کچھ بھی محفوظ نہیں کیا جاتا، کچھ لاگ نہیں ہوتا، کوئی ریکوئسٹ نہیں کی جاتی۔ صفحہ لوڈ ہونے کے بعد اپنا Wi-Fi بند کر دیں، یہ بالکل ویسے ہی کام کرے گا۔ ہماری بات پر یقین کرنے کے بجائے پرائیویسی کے دعوے کو خود پرکھنے کا یہ سب سے آسان طریقہ ہے۔
کیا یہ دستخط کی تصدیق کرتا ہے؟
نہیں، اور کوئی بھی آن لائن ڈیکوڈر آپ کی سائننگ کی کے بغیر ایمانداری سے یہ نہیں کر سکتا۔ ڈیکوڈ کرنا اور تصدیق کرنا بالکل مختلف عمل ہیں۔ ڈیکوڈ کرنا صرف ٹوکن سے Base64 ہٹانا ہے — کوئی بھی کسی بھی ٹوکن کے ساتھ یہ کر سکتا ہے، اور اس سے یہ بالکل ثابت نہیں ہوتا کہ ٹوکن اصلی ہے۔ تصدیق کا مطلب ہے دستخط کو اسی سیکرٹ یا پبلک کی سے دوبارہ حساب کرنا جس سے وہ سائن ہوا تھا، اور وہ کی کبھی کسی ویب سائٹ میں پیسٹ نہیں کی جانی چاہیے۔ یہاں آپ جو دیکھتے ہیں وہ ٹوکن کا دعویٰ ہے۔ یہ دعوے قابلِ بھروسہ ہیں یا نہیں، اس کا جواب صرف آپ کا سرور دے سکتا ہے، جس کے پاس کی ہے۔
کیا کوئی وہ JWT پڑھ سکتا ہے جو میں اسے بھیجوں؟
جی ہاں — مکمل طور پر، اور یہ بات لوگوں کو حیران کر دیتی ہے۔ JWT سائن کیا جاتا ہے، انکرپٹ نہیں۔ ہیڈر اور پے لوڈ Base64 ہیں، جو ایک ایسی انکوڈنگ ہے جس میں کوئی راز نہیں، اس لیے جو بھی ٹوکن پکڑ لے وہ اس کا ہر کلیم پڑھ سکتا ہے۔ دستخط انہیں ٹوکن کو بدلنے سے روکتے ہیں؛ پڑھنے سے روکنے کے لیے کچھ نہیں کرتے۔ JWT پے لوڈ میں کبھی کوئی خفیہ چیز نہ ڈالیں: نہ پاس ورڈز، نہ کارڈ نمبرز، نہ کوئی ایسا ذاتی ڈیٹا جو آپ پوسٹ کارڈ پر نہ لکھیں۔
“none” الگورتھم والی وارننگ کا کیا مطلب ہے؟
یہ کہ ٹوکن کہتا ہے وہ بغیر دستخط کا ہے، اور یہ اس صفحے کی سب سے سنگین رپورٹس میں سے ایک ہے۔ `alg: none` تصدیق کو بائی پاس کرنے کا ایک معلوم طریقہ ہے: حملہ آور ایک اصلی ٹوکن لیتا ہے، پے لوڈ بدل کر خود کو ایڈمنسٹریٹر لکھتا ہے، الگورتھم کو “none” کر دیتا ہے، دستخط ہٹا دیتا ہے، اور جو لائبریری ہیڈر پر بھروسہ کرتی ہے وہ اسے قبول کر لیتی ہے۔ اب ہر سنجیدہ JWT لائبریری اسے ڈیفالٹ طور پر روکتی ہے، لیکن `alg` پر بھروسہ کرنے والی امپلیمینٹیشنز اب بھی موجود ہیں۔ `alg: none` کے ساتھ آنے والے ٹوکن کو، جب تک اس کے برعکس ثابت نہ ہو، حملہ سمجھنا چاہیے۔
میں میعاد کیسے پڑھوں؟
یہ آپ کے لیے کر دیا جاتا ہے۔ `exp`، `iat` اور `nbf` یونکس ٹائم اسٹیمپس ہیں — 1970 سے اب تک کے سیکنڈز — جو خام نمبرز کے طور پر پڑھے نہیں جا سکتے۔ ہر ایک آپ کے اپنے ٹائم زون میں اصل تاریخ کے طور پر دکھایا جاتا ہے، ساتھ یہ کہ کتنی دیر پہلے یا کتنی دیر بعد، اور میعاد ختم ٹوکن کے بارے میں صاف بتا دیا جاتا ہے، آپ پر حساب لگانے کے لیے نہیں چھوڑا جاتا۔ جس ٹوکن میں `exp` بالکل نہ ہو اسے بھی نشان زد کیا جاتا ہے: جس JWT کی میعاد کبھی ختم نہ ہو اسے میعاد کے ذریعے منسوخ نہیں کیا جا سکتا، اور وہ تب تک درست رہتا ہے جب تک سائننگ کی۔
میرے ٹوکن کے تین نہیں، پانچ حصے ہیں
تو یہ JWE ہے — صرف سائن نہیں بلکہ انکرپٹ کیا ہوا — اور اس کا مواد ڈکرپشن کی کے بغیر واقعی پڑھا نہیں جا سکتا۔ صفحہ اس شکل کو پہچان لیتا ہے اور بے معنی چیز دکھانے کے بجائے آپ کو یہ بتا دیتا ہے۔ پانچ حصوں کا مطلب ہے کہ پے لوڈ اصل سائفر ٹیکسٹ ہے؛ ڈیکوڈ کرنے کے لیے کچھ نہیں۔
معیاری کلیمز کون سے ہیں؟
رجسٹرڈ کلیمز یہ ہیں: `iss` کس نے جاری کیا، `sub` یہ کس کے بارے میں ہے (عموماً یوزر ID)، `aud` یہ کس کے لیے ہے، `exp` میعاد کب ختم ہو گی، `nbf` اس سے پہلے درست نہیں، `iat` کب جاری کیا گیا، اور `jti` ٹوکن کی منفرد ID۔ باقی سب کچھ اس کی مرضی کا ہے جس نے سسٹم بنایا۔ آؤٹ پٹ میں ہر رجسٹرڈ کلیم پر اس کا مطلب لکھا ہوتا ہے، اس لیے آپ کو یاد رکھنے کی ضرورت نہیں کہ کون سا تین حرفی مخفف کیا ہے۔
جاننا مفید ہے: یہ ڈیکوڈ کرتا ہے؛ تصدیق نہیں کرتا۔ JWT کے دستخط ثابت کرتے ہیں کہ ٹوکن میں ردوبدل نہیں ہوا، اور انہیں چیک کرنے کے لیے جاری کرنے والے کی سیکرٹ یا پبلک کی چاہیے — جسے آپ کو کبھی کسی ویب پیج میں پیسٹ نہیں کرنا چاہیے۔ یہاں دکھائی گئی ہر چیز کو دعویٰ سمجھیں، ثبوت نہیں، اور تصدیق اپنے سرور پر کریں۔
یہ ٹول اپنی ویب سائٹ پر لگائیں
کسی بھی بلاگ، کلاس پیج یا ہیلپ آرٹیکل کے لیے مفت۔ ایک اسنیپٹ پیسٹ کریں اور آپ کے وزیٹرز اسے سیدھا آپ کے صفحے پر استعمال کر سکیں گے۔