JSON Web Token क्या है?
एक JSON Web Token (JWT) एक छोटे क्लेम्स पेलोड के लिए एक संक्षिप्त, URL-सुरक्षित एनवेलप है। यह स्टेटलेस वेब सेशन्स, OAuth/OIDC ID टोकन्स, मशीन-टू-मशीन API प्रमाणीकरण और हस्ताक्षरित मैजिक लिंक्स के लिए मानक क्रेडेंशियल प्रारूप है। एक JWT हमेशा डॉट्स से जुड़े तीन base64url खंड होते हैं: header.payload.signature। हेडर और पेलोड JSON हैं; हस्ताक्षर पहले दो खंडों पर एक बाइनरी MAC या डिजिटल हस्ताक्षर है।
JWT कैसे काम करते हैं?
जब यह टूल किसी टोकन को डिकोड करता है तो यह उन्हीं तीन चरणों का पालन करता है जिन्हें हर JWT लाइब्रेरी अपनाती है:
- टोकन को डॉट्स पर ठीक तीन गैर-खाली खंडों में विभाजित करें। कोई भी अन्य आकार विकृत माना जाता है।
- खंड 0 और 1 को Base64url-डिकोड करें, फिर प्रत्येक को
JSON.parseकरें। हेडर एल्गोरिथम (alg) और टोकन प्रकार (typ) ले जाता है। पेलोड क्लेम्स ले जाता है (sub,exp,iat, कस्टम कुंजियाँ)। - यदि एक सीक्रेट प्रदान किया गया है, तो हेडर में दिए गए एल्गोरिथम का उपयोग करते हुए
<segment0>.<segment1>पर MAC को पुनः गणना करें। तीसरे खंड के विरुद्ध बाइट्स की तुलना करें। - डिकोड किए गए क्लेम्स के साथ-साथ सत्यापन परिणाम को प्रस्तुत करें, जिसमें
expक्लेम से गणना किया गया मानव-पठनीय समाप्ति संकेतक भी शामिल है।
ब्राउज़र में JWT को क्यों डिकोड करें?
एक वास्तविक, उपयोग में आ रहे 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 डिकोडर है जिसे हम चाहते थे कि अस्तित्व में हो जब हमें प्रोडक्शन में किसी टोकन को डिबग करना था: गोपनीयता-सम्मानजनक, तेज़, और उन्हीं प्रिमिटिव्स पर बना जिनका उपयोग रनटाइम करता है।