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 समझें
JWT हेडर एनालाइज़र कैसे इस्तेमाल करें
- JWT पेस्ट करें, या सिर्फ़ उसका हेडर सेगमेंट / हेडर JSON।
- एल्गोरिदम, की के प्रकार और रिमोट की संदर्भों के लिए सारांश देखें।
- जोखिम विश्लेषण पढ़ें और पक्का करें कि आपका वेरिफ़ायर चिह्नित पैटर्न अस्वीकार करता है।
JWT हेडर एनालाइज़र की खूबियाँ
- हर JOSE हेडर पैरामीटर समझाता है: alg, typ, cty, kid, jku, jwk, x5u, x5c, x5t, crit, enc, zip
- एल्गोरिदम परिवार और की का प्रकार बताता है (साझा सीक्रेट बनाम पब्लिक की)
- alg=none, ख़ाली सिग्नेचर, रिमोट की URL, एम्बेड की गई कीज़ और इंजेक्शन जैसी kid वैल्यू चिह्नित करता है
- पूरा टोकन, सिर्फ़ उसका पहला सेगमेंट, या हेडर को JSON के रूप में स्वीकार करता है
- प्राथमिकता क्रम में लगी फ़ाइंडिंग के साथ कुल जोखिम स्तर
JWT हेडर एनालाइज़र का उदाहरण
JWK Set URL वाला एक हेडर
इनपुट:
{"alg":"RS256","typ":"JWT","kid":"2026-03-key-1","jku":"https://auth.example.com/.well-known/jwks.json"}आउटपुट:
High — jku (JWK Set URL) present: verifiers must only accept allow-listed hosts.
OK — RS256 (RSA public key): pin the expected algorithm to avoid HS/RS confusion.
Info — kid = 2026-03-key-1: use only to select pre-configured keys.JWT हेडर एनालाइज़र के बारे में अक्सर पूछे जाने वाले सवाल
"alg=none" हमला क्या है?
कुछ शुरुआती लाइब्रेरियाँ ऐसे टोकन स्वीकार कर लेती थीं जिनके हेडर में alg "none" घोषित था, और सिग्नेचर वेरिफ़िकेशन पूरी तरह छोड़ देती थीं — जिससे हमलावर कोई भी पेलोड गढ़ सकते थे। वेरिफ़ायर को "none" अस्वीकार करना चाहिए और सिर्फ़ स्पष्ट रूप से अनुमत एल्गोरिदम की सूची ही माननी चाहिए।
एल्गोरिदम कन्फ़्यूज़न (HS/RS) क्या है?
अगर वेरिफ़ायर हेडर की alg वैल्यू पर भरोसा कर ले, तो हमलावर RS256 को HS256 में बदलकर सर्वर की पब्लिक की (जो सार्वजनिक ही होती है) को HMAC सीक्रेट की तरह इस्तेमाल करके टोकन साइन कर सकता है। सर्वर की ओर से अपेक्षित एल्गोरिदम हमेशा तय (pin) रखें।
jku, x5u और jwk हेडर चिह्नित क्यों किए जाते हैं?
ये वेरिफ़ायर को बताते हैं कि सिग्नेचर जाँचने वाली की कहाँ से लाई जाए — या सीधे उसे एम्बेड कर देते हैं। अगर वेरिफ़ायर आँख मूँदकर इनका पालन करे, तो हमलावर अपनी ही की दे सकता है। भरोसा सिर्फ़ पहले से कॉन्फ़िगर किए गए स्टोर की कीज़ पर करना चाहिए।
kid में क्या होना चाहिए?
एक अपारदर्शी (opaque) पहचानकर्ता, जिससे जारीकर्ता की प्रकाशित कीज़ में से कोई एक चुनी जाती है। पाथ सेपरेटर, कोट्स या SQL अंश वाली वैल्यू उन वेरिफ़ायर पर इंजेक्शन की कोशिश का संकेत हैं जो kid से फ़ाइल या डेटाबेस पंक्ति लोड करते हैं।
तकनीकी नोट्स
हेडर संबंधी फ़ाइंडिंग RFC 7515/7516/7518 और RFC 8725 में बताए गए जोखिमों पर आधारित हैं: असुरक्षित JWS (alg none), एल्गोरिदम प्रतिस्थापन (जैसे RS256 को HS256 में बदलना), jku/x5u URL जिनका वेरिफ़ायर आँख मूँदकर पालन करे तो server-side request forgery (SSRF) का रास्ता खुलता है, और kid वैल्यू जो बिना सैनिटाइज़ किए SQL या LDAP लुकअप तक पहुँचती हैं। टूल एम्बेड की गई jwk और पाथ जैसी दिखने वाली kid वैल्यू को भी चिह्नित करता है — ये दो और तरीक़े हैं जिनसे लापरवाह वेरिफ़ायर को हमलावर द्वारा दी गई key इस्तेमाल करने की ओर मोड़ा जा सकता है; ये जाँचें heuristics हैं, RFC 8725 की अपेक्षाएँ नहीं। सुरक्षित वेरिफ़ायर कीज़ और एल्गोरिदम को लेकर हेडर के सुझाव अनदेखा करता है और अपने ही कॉन्फ़िगरेशन पर चलता है।
संदर्भ
- 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 और हर एक के लिए की-साइज़ की आवश्यकताएँ।