JWT क्या है?
JSON Web Token तीन Base64url सेगमेंट — header.payload.signature — की कॉम्पैक्ट स्ट्रिंग है जो किसी यूज़र या क्लाइंट के बारे में क्लेम (सब्जेक्ट, रोल, एक्सपायरी) और एक ऐसा सिग्नेचर ले जाती है जिसे रिसीवर सत्यापित कर सकता है। RFC 7519 में परिभाषित और साइनिंग नियम RFC 7515 व 7518 में, यह OAuth 2.0 एक्सेस टोकन और OpenID Connect ID टोकन का सामान्य फ़ॉर्मेट है। पेलोड केवल एन्कोडेड है, एन्क्रिप्टेड नहीं: टोकन रखने वाला कोई भी इसे पढ़ सकता है।
सुरक्षा नोट: डिकोड करना सत्यापित करना नहीं है। सर्वर को पिन की गई एल्गोरिद्म से सिग्नेचर जाँचना, alg=none अस्वीकार करना और exp, iss व aud सत्यापित करने चाहिए — और कहीं भी पेस्ट किया गया असली टोकन एक्सपायर होने तक एक सीक्रेट है।
गाइड पढ़ें: JWT क्या है? JSON Web Token समझें
डॉट से जुड़े तीन Base64url सेगमेंट
भाग 1:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 .भाग 2:eyJzdWIiOiJ1c2VyXzhmM2EyYyIsIm5hbWUiOiJM…ZTc3In0 .भाग 3:kdLA0Qli1L94KTgKtg-iHDDKIfyhZ1kz6A2v81TBOlg
- 1–2साइनिंग इनपुट: डॉट से जुड़े ये दो सेगमेंट, Base64url टेक्स्ट के रूप में; डिकोड किया हुआ JSON नहीं।
- 1हेडरBase64url → JSON: टोकन टाइप और एल्गोरिदम, यहाँ
HS256।{"typ":"JWT","alg":"HS256"} - 2पेलोडBase64url → JSON क्लेम। केवल एन्कोडेड, एन्क्रिप्टेड नहीं: टोकन रखने वाला कोई भी इसे पढ़ सकता है।
{"sub":"user_8f3a2c","name":"Layla Hassan","role":"admin",…} - 3सिग्नेचरसीक्रेट के साथ सेगमेंट 1 और 2 का HMAC-SHA256: 32 बाइट, फिर Base64url में एन्कोड। यह साबित करता है कि वे बदले नहीं गए।
HMAC-SHA256(secret, "eyJ0eXAi…" + "." + "eyJzdWIi…")यह टूल आपके सीक्रेट से HS256/384/512 वेरिफ़ाई करता है; RS/ES/PS के लिए जारीकर्ता की पब्लिक की चाहिए, इसलिए यहाँ वे सिर्फ़ डिकोड होते हैं
टूल का सैंपल टोकन, जिसका पेलोड यहाँ छोटा किया गया है। सैंपल सीक्रेट your-256-bit-secret से सिग्नेचर वेरिफ़ाई होता है।
JWT डिकोडर कैसे इस्तेमाल करें
- JWT पेस्ट करें (पूरा "Authorization: Bearer …" हेडर भी चलेगा)।
- सारांश पढ़ें: एल्गोरिदम, टोकन एक्सपायर हुआ है या नहीं, वह कब जारी हुआ और कब एक्सपायर होगा।
- हेडर तथा पेलोड JSON और हर क्लेम का अर्थ बताने वाली क्लेम तालिका देखें।
- चाहें तो HMAC सीक्रेट डालकर सिग्नेचर लोकल ही वेरिफ़ाई करें।
- डिकोड किया हुआ JSON कॉपी करें या डाउनलोड करें।
JWT डिकोडर की खूबियाँ
- किसी भी JWS टोकन का हेडर, पेलोड और सिग्नेचर सेगमेंट डिकोड करता है; JWE टोकन पहचानता है
- रजिस्टर्ड (RFC 7519) और आम OIDC/OAuth क्लेम को पढ़ने योग्य तालिका में समझाता है
- exp, iat और nbf को UTC तारीख़ों में बदलता है, साथ में "2 घंटे में एक्सपायर" जैसे नोट
- वर्डिक्ट पैनल में एल्गोरिदम, एक्सपायरी की स्थिति, जारी होने का समय और लाइफ़टाइम
- साझा सीक्रेट (UTF-8 या Base64) से वैकल्पिक HS256/HS384/HS512 सिग्नेचर वेरिफ़िकेशन
- "Bearer" प्रीफ़िक्स, कोट्स और स्पेस अपने आप हटाता है; पेस्ट करते ही लाइव डिकोडिंग
- पूरी तरह आपके ब्राउज़र में चलता है — टोकन कभी अपलोड नहीं होते
JWT डिकोडर का उदाहरण
HS256 एक्सेस टोकन डिकोड करना
इनपुट:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyXzhmM2EyYyIsIm5hbWUiOiJMYXlsYSBIYXNzYW4iLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3MDAwMDAwMDAsImV4cCI6NDEwMjQ0NDgwMH0.…आउटपुट:
{
"sub": "user_8f3a2c",
"name": "Layla Hassan",
"role": "admin",
"iat": 1700000000,
"exp": 4102444800
}
Algorithm: HS256 · Expired: No · Issued: 2023-11-14 22:13:20 UTC · Expires: 2100-01-01 00:00:00 UTCJWT डिकोडर के बारे में अक्सर पूछे जाने वाले सवाल
क्या यहाँ प्रोडक्शन टोकन पेस्ट करना सुरक्षित है?
टोकन आपके ब्राउज़र में JavaScript से डिकोड होता है और कभी किसी सर्वर पर नहीं भेजा जाता, न लॉग होता है, न स्टोर। फिर भी लाइव टोकन को सीक्रेट की तरह ही मानें: जिसे भी वह मिल जाए, वह एक्सपायर होने तक उसका इस्तेमाल कर सकता है।
बिना सीक्रेट के मैं पेलोड क्यों पढ़ पा रहा हूँ?
JWT साइन किया जाता है, एन्क्रिप्ट नहीं। हेडर और पेलोड सिर्फ़ Base64url में एन्कोड होते हैं, इसलिए उन्हें कोई भी पढ़ सकता है। सिग्नेचर यह साबित करता है कि टोकन बदला नहीं गया — वह उसका कंटेंट छिपाता नहीं। एन्क्रिप्टेड टोकन (JWE) में पाँच सेगमेंट होते हैं और उन्हें बिना की के पढ़ा नहीं जा सकता।
क्या टूल सिग्नेचर वेरिफ़ाई कर सकता है?
HMAC टोकन (HS256, HS384, HS512) के लिए हाँ: साझा सीक्रेट डालें और सिग्नेचर WebCrypto से लोकल ही जाँचा जाता है। RS/ES/PS टोकन के लिए जारीकर्ता की पब्लिक की चाहिए, इसलिए वे यहाँ डिकोड तो होते हैं पर वेरिफ़ाई नहीं।
exp, iat और nbf का क्या मतलब है?
ये सेकंड में Unix टाइमस्टैम्प हैं। exp वह समय है जब टोकन वैध नहीं रहता, iat वह समय है जब वह जारी हुआ, और nbf वह सबसे पहला समय है जब उसका इस्तेमाल किया जा सकता है। क्लेम तालिका हर एक को UTC में बदलती है और बताती है कि कितना समय बचा है।
मैंने जो टोकन पेस्ट किया वह "Bearer" से शुरू होता है — क्या यह समस्या है?
नहीं। डिकोड करने से पहले "Bearer " और "Authorization:" प्रीफ़िक्स, आसपास के कोट्स और स्पेस अपने आप हटा दिए जाते हैं।
तकनीकी नोट्स
JWS कॉम्पैक्ट टोकन डॉट से अलग किए गए तीन Base64url सेगमेंट होता है। डिकोडर URL-सुरक्षित अल्फ़ाबेट को वापस बाइट में बदलता है, छूटी हुई पैडिंग ठीक करता है और हेडर तथा पेलोड को JSON के रूप में पार्स करता है। पाँच सेगमेंट वाले टोकन JWE (एन्क्रिप्टेड) होते हैं — हेडर दिख जाता है, पर पेलोड बिना की के नहीं पढ़ा जा सकता।
सिग्नेचर वेरिफ़िकेशन WebCrypto से "header.payload" का HMAC-SHA निकालता है और उसकी तुलना सिग्नेचर बाइट से करता है। असममित एल्गोरिदम (RS/ES/PS/EdDSA) डिकोड तो होते हैं पर वेरिफ़ाई नहीं, क्योंकि उसके लिए जारीकर्ता की पब्लिक की चाहिए।
संदर्भ
- RFC 7519: JSON Web Token (JWT)JWT फ़ॉर्मेट — हेडर, पेलोड, सिग्नेचर — और रजिस्टर्ड क्लेम iss, sub, aud, exp, nbf, iat और jti को परिभाषित करता है।
- RFC 7515: JSON Web Signature (JWS)JWT कैसे साइन और सीरियलाइज़ होता है: प्रोटेक्टेड हेडर, साइनिंग इनपुट और कॉम्पैक्ट सीरियलाइज़ेशन।
- RFC 7518: JSON Web Algorithms (JWA)alg हेडर के पीछे की एल्गोरिद्म: HS256/384/512, RS256, ES256 और हर एक के लिए की-साइज़ की आवश्यकताएँ।