उपयोग कैसे करें
- पूरा टोकन पेस्ट करें, यानी बिंदुओं से अलग किए गए तीनों Base64URL भाग।
- डिकोड किया गया हेडर और पेलोड पढ़ें। exp, iat और nbf क्लेम तारीखों के रूप में दिखाए जाते हैं, और टोकन की समय-सीमा ख़त्म होने या उसके अभी मान्य न होने पर चेतावनी मिलती है।
- सिग्नेचर सत्यापित करने के लिए HS256, HS384 या HS512 के लिए साझा सीक्रेट दर्ज करें, या RS, PS या ES एल्गोरिदम के लिए PEM सार्वजनिक कुंजी पेस्ट करें।
- जाँच लें कि जारीकर्ता, ऑडियंस और सब्जेक्ट क्लेम वही हैं जिनकी आपका एप्लिकेशन अपेक्षा करता है।
JWT की बनावट
JSON Web Token (RFC 7519) में बिंदुओं से अलग किए गए तीन भाग होते हैं: header.payload.signature। हेडर और पेलोड JSON ऑब्जेक्ट हैं, जिन्हें बिना पैडिंग के Base64URL में एनकोड किया जाता है। इसी वजह से टोकन लगभग हमेशा eyJ से शुरू होते हैं, जो शुरुआती {" का एनकोड किया गया रूप है। सिग्नेचर की गणना पहले दो भागों पर ठीक उसी रूप में की जाती है जिस रूप में वे टोकन में मौजूद हैं।
- हेडर:
algमें साइनिंग एल्गोरिदम, आमतौर पर"typ": "JWT", और अक्सर एकkid, जो कुंजी का नाम बताता है। - पेलोड: क्लेम, जैसे यूज़र कौन है, टोकन किसने जारी किया और उसकी समय-सीमा कब ख़त्म होती है।
- सिग्नेचर: एक HMAC, RSA या ECDSA सिग्नेचर, जो साबित करता है कि हेडर और पेलोड में कोई बदलाव नहीं किया गया है।
पाँच भागों वाला टोकन एन्क्रिप्ट किया गया JWE होता है; डिक्रिप्शन कुंजी के बिना उसकी सामग्री पढ़ी नहीं जा सकती।
पंजीकृत क्लेम
| क्लेम | नाम | अर्थ |
|---|---|---|
iss | जारीकर्ता (Issuer) | टोकन किसने बनाया और साइन किया |
sub | सब्जेक्ट (Subject) | टोकन किसके बारे में है, आमतौर पर एक यूज़र ID |
aud | ऑडियंस (Audience) | वह सेवा जिसके लिए टोकन बनाया गया है |
exp | समाप्ति का समय (Expiration time) | इस समय के बाद टोकन को अस्वीकार करना ज़रूरी है |
nbf | मान्य होने का समय (Not before) | इस समय से पहले टोकन को अस्वीकार करना ज़रूरी है |
iat | जारी होने का समय (Issued at) | टोकन कब बनाया गया |
jti | JWT ID | अद्वितीय पहचानकर्ता, जिसका उपयोग रीप्ले हमलों को पकड़ने के लिए होता है |
समय NumericDate मान होते हैं: 1 जनवरी 1970 UTC से बीते सेकंड, मिलीसेकंड नहीं। डिकोडर इन्हें पढ़ने योग्य तारीखों के रूप में दिखाता है और आपके डिवाइस की घड़ी से इनकी तुलना करता है।
डिकोड करना सत्यापन नहीं है
कोई भी JWT को डिकोड कर सकता है, क्योंकि पेलोड केवल एनकोड किया जाता है, एन्क्रिप्ट नहीं; इसलिए इसमें कभी पासवर्ड या दूसरी गोपनीय जानकारी न रखें। भरोसा केवल सही कुंजी से सिग्नेचर जाँचने पर बनता है, और टोकन स्वीकार करने वाले सर्वर को यह भी ध्यान रखना चाहिए कि वह:
- केवल अपेक्षित एल्गोरिदम को स्वीकार करे और
"alg": "none"को अस्वीकार करे, जो बिना सिग्नेचर वाले टोकन का संकेत है; - टोकन के हेडर को कभी HMAC और RSA के बीच चुनने न दे, वरना हमलावर आपकी सार्वजनिक कुंजी को HMAC सीक्रेट की तरह इस्तेमाल करके नकली टोकन साइन कर सकता है;
- हर अनुरोध पर
exp,nbf,issऔरaudकी जाँच करे।
इस पेज पर वैकल्पिक सत्यापन आपके ब्राउज़र में मौजूद Web Crypto API का उपयोग करता है। डिकोडिंग और सत्यापन आपके डिवाइस पर ही होते हैं और कुछ भी अपलोड नहीं होता। सामान्य नियम के तौर पर, प्रोडक्शन की साइनिंग कुंजियाँ या लाइव टोकन कभी भी ऐसी वेबसाइटों में पेस्ट न करें जिन पर आपको भरोसा न हो।
अक्सर पूछे जाने वाले प्रश्न
क्या इस डिकोडर में JWT पेस्ट करना सुरक्षित है?
टोकन आपके ब्राउज़र में JavaScript द्वारा डिकोड और सत्यापित किया जाता है और कभी किसी सर्वर पर नहीं भेजा जाता। ध्यान रखें कि जिस टोकन की समय-सीमा अभी ख़त्म नहीं हुई है, वह जिसके पास भी हो उसके लिए पासवर्ड की तरह काम करता है, इसलिए स्क्रीनशॉट या लॉग शेयर करते समय टेस्ट टोकन या समय-सीमा ख़त्म हो चुके टोकन का ही उपयोग करें।
क्या सीक्रेट कुंजी के बिना JWT डिकोड किया जा सकता है?
हाँ। हेडर और पेलोड साधारण Base64URL में एनकोड किया गया JSON हैं, इसलिए उन्हें बिना किसी कुंजी के पढ़ा जा सकता है। सीक्रेट या सार्वजनिक कुंजी की ज़रूरत केवल सिग्नेचर सत्यापित करने के लिए होती है।
डिकोडर क्यों बताता है कि मेरे टोकन की समय-सीमा ख़त्म हो चुकी है?
exp क्लेम आपके डिवाइस के मौजूदा समय से पहले का है। अगर टोकन अभी भी मान्य होना चाहिए, तो अपने सिस्टम की घड़ी और जारीकर्ता द्वारा तय की गई टोकन की वैधता अवधि जाँचें।किन सिग्नेचर एल्गोरिदम को सत्यापित किया जा सकता है?
साझा सीक्रेट के साथ HS256, HS384 और HS512, और PEM फ़ॉर्मैट की सार्वजनिक कुंजी के साथ RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384 और ES512।
"alg": "none" का क्या मतलब है?
यह ख़ाली सिग्नेचर वाले असुरक्षित JWT का संकेत है, जिसे RFC 7518 में परिभाषित किया गया है। ऐसा टोकन कोई भी बना या बदल सकता है, इसलिए साइन किए गए टोकन की अपेक्षा रखने वाले सर्वर को इसे हमेशा अस्वीकार करना चाहिए।