JWT डिकोड करें
JSON Web Token का हेडर, क्लेम और एक्सपायरी देखें। टोकन एक काम करता क्रेडेंशियल है, इसलिए यहां कुछ भी कहीं नहीं भेजा जाता, न कभी स्टोर होता है।
- कभी स्टोर नहीं होती
- न कतार, न इंतज़ार
- साइनअप नहीं, वॉटरमार्क नहीं
आपका टोकन कभी इस पेज से बाहर नहीं जाता। यह यहीं डिकोड होता है, किसी भी सर्वर को कोई रिक्वेस्ट भेजे बिना — और यह मायने रखता है, क्योंकि JWT आमतौर पर एक चालू क्रेडेंशियल होता है। पेज लोड होने के बाद अपना Wi-Fi बंद कर दें, फिर भी यह डिकोड होगा: कुछ भी नहीं भेजा जाता।
“Bearer ” प्रीफ़िक्स से कोई दिक़्क़त नहीं — उसे अनदेखा कर दिया जाता है।
यह कैसे काम करता है
टोकन पेस्ट करें
“Bearer ” प्रीफ़िक्स के साथ या उसके बिना। यह इसी पेज में रहता है; कोई रिक्वेस्ट नहीं भेजी जाती।
तीनों हिस्से पढ़ें
हेडर, पेलोड और सिग्नेचर, हर एक डिकोड और फ़ॉर्मैट किया हुआ। टाइमस्टैम्प असली तारीख़ बन जाते हैं और बताया जाता है कि कितना समय बचा है।
चेतावनियां देखें
एक्सपायर हो चुके टोकन, छूटी एक्सपायरी, “none” एल्गोरिदम और दूसरी समस्याएं उनके मतलब के साथ बताई जाती हैं।
क्या जांचा जाता है, और क्या सिर्फ़ पढ़ा जाता है
दो तारीख़ों की तुलना को छोड़कर इस पेज पर सब कुछ सिर्फ़ नक़ल है। हेडर और पेलोड Base64URL से डिकोड करके दिखाए जाते हैं; सिग्नेचर बस कॉपी किया जाता है और कभी छुआ नहीं जाता, क्योंकि यहां कोई की नहीं है और कोई क्रिप्टोग्राफ़ी चलती ही नहीं। पेज जो दो फ़ैसले करता है, वे आपके अपने डिवाइस की घड़ी के साथ सीधा हिसाब हैं — expiry क्लेम की तुलना अभी के समय से, और not-before क्लेम की तुलना अभी के समय से। घड़ी के अंतर (clock skew) की कोई छूट नहीं दी जाती, जबकि वही टोकन जांचने वाला सर्वर आमतौर पर एक-दो मिनट की छूट देता है। पांच मिनट आगे चल रहा लैपटॉप एक चालू टोकन को एक्सपायर दिखाएगा, जबकि टोकन बिल्कुल ठीक होगा।
आप असल में क्या देखते हैं, यह पार्सिंग की दो बारीकियां तय करती हैं। टाइम क्लेम सिर्फ़ तब पढ़े जाते हैं जब वे JSON नंबर के रूप में आते हैं: जिस टोकन की एक्सपायरी स्ट्रिंग "1699999999" के रूप में लिखी गई है, उसे बिना एक्सपायरी वाला माना जाता है, और उसे यह चेतावनी मिलती है कि वह अपने-आप कभी एक्सपायर नहीं होता — जो सच का उल्टा है। और पेलोड ब्राउज़र के अपने JSON पार्सर से पार्स होता है, हमारे JSON टूल्स में इस्तेमाल होने वाले अंक बचाने वाले पार्सर से नहीं, इसलिए subject में snowflake यूज़र ID जैसा 64-बिट न्यूमेरिक क्लेम आख़िरी अंकों को राउंड करके दिखाया जाता है। ठीक इसी वजह से JWT में आइडेंटिफ़ायर आमतौर पर स्ट्रिंग होते हैं; जब कोई स्ट्रिंग न हो, तो उसे क्लेम टेबल के बजाय raw पेलोड से पढ़ें।
पांच सेक्शन वाले टोकन को एन्क्रिप्टेड 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` Unix टाइमस्टैम्प हैं — 1970 से अब तक के सेकंड — जो कच्चे नंबर के रूप में पढ़े नहीं जा सकते। हर एक को आपके अपने टाइमज़ोन में असली तारीख़ के रूप में दिखाया जाता है, साथ में कितना पहले या अब से कितने समय बाद, और एक्सपायर हो चुके टोकन के बारे में साफ़ बताया जाता है, आपको ख़ुद हिसाब नहीं लगाना पड़ता। जिस टोकन में `exp` है ही नहीं, उसे भी चिह्नित किया जाता है: जो JWT कभी एक्सपायर नहीं होता, उसे एक्सपायरी से रद्द नहीं किया जा सकता, और वह तब तक मान्य रहता है जब तक साइनिंग की।
मेरे टोकन में तीन नहीं, पांच हिस्से हैं
तब वह JWE है — सिर्फ़ साइन किया हुआ नहीं, एन्क्रिप्ट किया हुआ — और डिक्रिप्शन की के बिना उसका कंटेंट सच में पढ़ा नहीं जा सकता। पेज यह बनावट पहचानकर आपको बेतुका डेटा दिखाने के बजाय यही बता देता है। पांच हिस्सों का मतलब है कि पेलोड असली ciphertext है; डिकोड करने को कुछ नहीं है।
स्टैंडर्ड क्लेम कौन-से हैं?
रजिस्टर्ड क्लेम ये हैं: `iss` किसने जारी किया, `sub` यह किसके बारे में है (आमतौर पर यूज़र ID), `aud` यह किसके लिए है, `exp` कब एक्सपायर होगा, `nbf` इससे पहले मान्य नहीं, `iat` कब जारी हुआ, और `jti` टोकन की यूनीक ID। बाक़ी सब सिस्टम बनाने वाले के अपने कस्टम क्लेम हैं। आउटपुट में हर रजिस्टर्ड क्लेम के साथ उसका मतलब लिखा होता है, इसलिए आपको याद रखने की ज़रूरत नहीं कि कौन-सा तीन-अक्षर का संक्षिप्त नाम क्या है।
ध्यान दें: यह डिकोड करता है; वेरिफ़ाई नहीं करता। JWT का सिग्नेचर साबित करता है कि टोकन में बदलाव नहीं हुआ, और उसे जांचने के लिए जारी करने वाले की सीक्रेट या पब्लिक की चाहिए — जिसे आपको किसी वेब पेज में कभी पेस्ट नहीं करना चाहिए। यहां दिखने वाली हर चीज़ को दावा मानें, सबूत नहीं, और वेरिफ़िकेशन अपने सर्वर पर करें।
यह टूल अपनी वेबसाइट पर लगाएं
किसी भी ब्लॉग, क्लास पेज या हेल्प आर्टिकल के लिए मुफ़्त। एक स्निपेट पेस्ट करें और आपके विज़िटर इसे सीधे आपके पेज पर इस्तेमाल कर सकेंगे।
और डेवलपर टूल्स
Base64 डिकोड करें
Base64 को वापस टेक्स्ट या फ़ाइल में बदलें
JSON फ़ॉर्मैटर
उलझे JSON को पढ़ने लायक बनाएं
हैश जनरेटर
MD5, SHA-1, SHA-256, SHA-384 और SHA-512
Base64 एन्कोड करें
टेक्स्ट या फ़ाइल को Base64 में बदलें
UUID जनरेटर
सीक्रेट के लिए v4, डेटाबेस की के लिए v7
JSON वैलिडेटर
पता करें कि JSON ठीक कहां टूटा है