JWT डिकोडर
JSON वेब टोकन (JWT) एक कॉम्पैक्ट, URL-सुरक्षित टोकन फॉर्मेट है जिसका उपयोग लगभग हर आधुनिक ऑथेंटिकेशन सिस्टम में होता है - OAuth एक्सेस टोकन, सिंगल-पेज ऐप्स के लिए सेशन कुकीज़, माइक्रोसर्विसेज़ के बीच आदान-प्रदान होने वाली API कीज़, और भी बहुत कुछ। यह टूल JWT को उसकी अपनी सामग्री से पूरी तरह डिकोड करता है: यह हेडर और पेलोड पढ़ता है, साइनिंग एल्गोरिदम पता करता है, यह जांचता है कि टोकन की अवधि समाप्त हुई है या नहीं, और मानक क्लेम्स को एक पठनीय तालिका में सूचीबद्ध करता है।
JWT क्या है?
एक JWT तीन Base64URL-एन्कोडेड सेगमेंट होते हैं जो डॉट्स से जुड़े होते हैं:
- हेडर - एक छोटा JSON ऑब्जेक्ट जो साइनिंग एल्गोरिदम (
alg) और टोकन प्रकार (typ) बताता है, जैसे{"alg":"HS256","typ":"JWT"} - पेलोड - क्लेम्स का एक JSON ऑब्जेक्ट: एप्लिकेशन-विशिष्ट डेटा के साथ-साथ
exp(एक्सपायरी),iat(जारी करने का समय), औरsub(सब्जेक्ट) जैसे मानक रजिस्टर्ड क्लेम्स - सिग्नेचर - हेडर और पेलोड को किसी सीक्रेट या प्राइवेट की से साइन करके निकाला जाता है, ताकि प्राप्त करने वाला सर्वर सत्यापित कर सके कि टोकन के साथ छेड़छाड़ नहीं हुई है
हेडर और पेलोड केवल एन्कोडेड होते हैं, एन्क्रिप्टेड नहीं - JWT रखने वाला कोई भी व्यक्ति उसकी सामग्री पढ़ सकता है, और यही टूल करता है।
यह टूल कैसे काम करता है
- टोकन को
.पर विभाजित करके तीन भागों में तोड़ता है और जो भी बिल्कुल तीन भाग न हो उसे अस्वीकार करता है - हेडर और पेलोड सेगमेंट को Base64URL-डिकोड करता है और प्रत्येक को JSON के रूप में पार्स करता है
- डिकोड किए गए हेडर से
algऔरtypपढ़ता है - यदि पेलोड में एक संख्यात्मक
expक्लेम है, तो उसे वर्तमान समय से तुलना करके बताता है कि टोकन मान्य है या समाप्त हो चुका है, और कितने समय से - पेलोड में मौजूद मानक रजिस्टर्ड क्लेम्स (
iss,sub,aud,exp,iat,nbf,jti) को एक तालिका में निकालता है, यूनिक्स टाइमस्टैम्प को पठनीय तिथियों में बदलते हुए
यह टूल सिग्नेचर को कभी सत्यापित नहीं करता - ऐसा करने के लिए साइनिंग सीक्रेट या पब्लिक की चाहिए होगी, जिसे यह टूल कभी नहीं मांगता या देखता। यह केवल टोकन के उन हिस्सों को डिकोड और निरीक्षण करता है जो इसे रखने वाले किसी भी व्यक्ति के लिए पहले से ही सादा टेक्स्ट हैं।
उदाहरण
ऊपर दिए गए फ़ील्ड में यह प्रसिद्ध सैंपल टोकन (jwt.io पर भी उपयोग किया जाता है) पेस्ट करें और सबमिट करें:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
इसे डिकोड करने पर मिलता है:
- हेडर:
{"alg":"HS256","typ":"JWT"} - पेलोड:
{"sub":"1234567890","name":"John Doe","iat":1516239022} - स्टेटस: कोई एक्सपायरी क्लेम नहीं - यह टोकन कभी समाप्त नहीं होता
- क्लेम्स तालिका:
sub(सब्जेक्ट) =1234567890,iat(जारी करने का समय) = टाइमस्टैम्प को पठनीय UTC तिथि में बदला गया
यह क्यों महत्वपूर्ण है
बिना किसी तीसरे पक्ष की वेबसाइट पर JWT पेस्ट किए उसका निरीक्षण करने की क्षमता, ऑथेंटिकेशन डीबग करते समय बहुत काम आती है: यह पुष्टि करना कि कोई API वास्तव में किस एल्गोरिदम से साइन करता है, यह जांचना कि क्लाइंट को दोष देने से पहले एक्सेस टोकन एक्सपायर हो चुका है या नहीं, या यह सत्यापित करना कि आपके बैकएंड को अपेक्षित कोई क्लेम (जैसे aud या कोई कस्टम टेनेंट ID) वास्तव में आपको मिले टोकन में मौजूद है।