JWT डिकोडर
JSON Web Token को डिकोड करके देखें। सिग्नेचर वेरिफ़िकेशन के लिए साइनिंग की ज़रूरी है और वह सर्वर-साइड होना चाहिए — यह टूल सिर्फ़ कंटेंट दिखाता है।
हेडर
पेलोड
सिग्नेचर
- अपने ऐप, API रेस्पॉन्स, या Authorization हेडर से JWT कॉपी करें।
- इसे बॉक्स में पेस्ट करें। टाइप करते ही डिकोडिंग चलती है।
- डिकोड किया हुआ हेडर और पेलोड पढ़ें; सिग्नेचर संदर्भ के लिए वैसे ही दिखाया जाता है।
- एक्सपायर्ड टोकन पहचानने के लिए टाइम-क्लेम सारांश (iat, exp, nbf) देखें।
यह क्या करता है?
JSON Web Token बिंदुओं से जुड़े तीन base64url एन्कोडेड खंड है: header.payload.signature। हेडर और पेलोड JSON हैं; सिग्नेचर पहले दो खंडों पर HMAC या RSA/ECDSA का आउटपुट है। यह टूल बिंदुओं पर विभाजन करता है, हर हिस्से को base64url से डिकोड करता है, JSON पार्स करता है और exp जैसे मानक टाइम क्लेम को मानव-पठनीय तारीख़ के रूप में दिखाता है। यह सिग्नेचर वेरिफ़ाई नहीं करता — कारण के लिए नीचे FAQ देखें।
उदाहरण
JWT विनिर्देश का नमूना टोकन (HS256 से your-256-bit-secret गुप्त कुंजी द्वारा हस्ताक्षरित):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c डिकोड किया हुआ हेडर:
{
"alg": "HS256",
"typ": "JWT"
} डिकोड किया हुआ पेलोड:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
} मेरा JWT सिग्नेचर अमान्य क्यों दिख रहा है?
यह डिकोडर सिग्नेचर की जाँच नहीं करता (देखें FAQ), पर यदि कोई सर्वर-साइड वेरिफ़ायर आपके टोकन को नकार रहा है, तो आमतौर पर ये कारण होते हैं।
- ग़लत गुप्त कुंजी या की। HMAC गुप्त कुंजी में एक अक्षर का फ़र्क़ भी पूरी तरह अलग सिग्नेचर देता है। सत्यापन सेवा के JWT_SECRET env var को जारीकर्ता से मिलाएँ।
- एल्गोरिदम का मेल नहीं। HS256 से हस्ताक्षरित टोकन को RS256 से वेरिफ़ाई नहीं किया जा सकता। हेडर में alg क्लेम जाँचें और सुनिश्चित करें कि वेरिफ़ायर उसी एल्गोरिदम के लिए कॉन्फ़िगर है।
- एक्सपायर हो चुका टोकन। सही हस्ताक्षरित JWT भी exp बीतने पर मान्यता खो देता है। डिकोड के बाद टाइम-क्लेम सारांश यह स्पष्ट दिखाता है।
- क्लॉक स्क्यू। nbf (not-before) थोड़ा भविष्य में हो और सर्वर घड़ी में अंतर हो तो "token not yet valid" जैसी त्रुटियाँ आती हैं। वेरिफ़ायर में थोड़ी छूट (उदा. 60 सेकंड) रखें।
- पेस्ट किए गए टोकन में सफ़ेद जगह। कॉपी-पेस्ट कभी-कभी शुरू में स्पेस या अंत में न्यूलाइन लाता है। JWT सटीक header.payload.signature होना चाहिए, बिना किसी आसपास की सफ़ेद जगह के।
- alg: none। यदि हेडर में "alg": "none" है तो टोकन अहस्ताक्षरित है। वेरिफ़ायर में इन्हें अस्वीकार करें — कभी वैध न मानें।
अक्सर पूछे जाने वाले प्रश्न
क्या यह टूल JWT सिग्नेचर वेरिफ़ाई कर सकता है?
नहीं, और यह जानबूझकर है। सिग्नेचर वेरिफ़ाई करने के लिए साइनिंग की ज़रूरी है — HMAC साझा गुप्त या असममित पब्लिक की। वह की उस सर्वर पर होनी चाहिए जो टोकन जारी/उपभोग करता है, न कि वेब पेज में पेस्ट हो। यह टूल केवल डिकोड और डिस्प्ले करता है; वेरिफ़िकेशन आपके बैकएंड के सर्वर-साइड पर होता है।
JWT के तीनों खंडों में क्या होता है?
JWT है header.payload.signature। हेडर एल्गोरिदम (alg) और टोकन प्रकार का वर्णन करता JSON है। पेलोड sub, iat, exp जैसे क्लेम वाला JSON है। सिग्नेचर पहले दो खंडों को गुप्त या निजी कुंजी से साइन करने का base64url-एन्कोडेड आउटपुट है। पहले दो केवल एन्कोडेड हैं, एन्क्रिप्टेड नहीं।
मेरा JWT एक्सपायर हो गया — कैसे पता करूँ?
पेलोड में exp क्लेम देखें। यह सेकंडों में Unix टाइमस्टैम्प है। यदि Date.now() / 1000 exp से बड़ा है तो टोकन एक्सपायर हो चुका। यह टूल exp, iat और nbf को पेलोड के नीचे मानव-पठनीय तारीख़ों में दिखाता है, ताकि गणना के बिना एक नज़र में पता चले।
alg: none का क्या मतलब है और यह ख़तरनाक क्यों है?
alg: none एक JWT फ़ीचर है जिसमें सिग्नेचर खाली होता है और जाँचा नहीं जाता। कई लाइब्रेरियों ने ऐतिहासिक रूप से ऐसे टोकन स्वीकार किए, जिससे हमलावर पेलोड बनाकर alg को none पर सेट करके JWT गढ़ सकते थे। यदि यह हेडर मान दिखे तो टोकन अहस्ताक्षरित है — ऐसे टोकन स्वीकार करने वाले किसी भी सर्वर पर भरोसा न करें।
क्या आप यहाँ पेस्ट किए गए JWT सहेजते हैं?
नहीं। डिकोडर में पेस्ट किया कोई टोकन हम नहीं सहेजते। जो भी डालते हैं वह टैब बंद या रिफ्रेश करते ही हट जाता है — कोई लॉग नहीं, और आपने जाँचे टोकन का हमारी तरफ़ कोई रिकॉर्ड नहीं। फिर भी JWT अपने exp तक एक्सेस देता है: इसे पासवर्ड की तरह मानें और डीबग किए गए किसी भी प्रोडक्शन टोकन को रोटेट करें।
सिग्नेचर सेक्शन में एक अपठनीय ब्लॉब दिखता है — क्या यह सामान्य है?
हाँ। सिग्नेचर HMAC या RSA/ECDSA का बाइनरी आउटपुट है, जो base64url-एन्कोडेड होता है। यह मानव-पठनीय होने के लिए नहीं है — केवल क्रिप्टोग्राफ़िक जाँच के लिए है। आप जिन पर काम करते हैं वे डिकोडेड हेडर और पेलोड JSON हिस्से हैं। ख़ाली सिग्नेचर मतलब टोकन अहस्ताक्षरित है (alg: none)।