मुफ़्त JWT डिकोडर

JSON Web Tokens को डिकोड और निरीक्षण करें · हेडर, पेलोड, क्लेम्स और समाप्ति।

हेडर


      

पेलोड


      

हस्ताक्षर


      

JWT के बारे में

JSON Web Tokens (JWTs) दो पक्षों के बीच क्लेम्स को दर्शाने का एक संक्षिप्त तरीका हैं। इनके तीन भाग होते हैं: एक हेडर (एल्गोरिदम और प्रकार), एक पेलोड (क्लेम्स जैसे जारीकर्ता, समाप्ति, विषय), और एक हस्ताक्षर। यह टूल हेडर और पेलोड को डिकोड करता है लेकिन हस्ताक्षरों को सत्यापित नहीं करता · इसके लिए आपको साइनिंग सीक्रेट या पब्लिक की की आवश्यकता होती है। सारा डिकोडिंग आपके ब्राउज़र में ही होता है; आपका टोकन कहीं नहीं भेजा जाता।

JSON Web Token का संक्षिप्त इतिहास

JSON Web Token (JWT) को IETF के JOSE वर्किंग ग्रुप के तहत Michael B. Jones (Microsoft), John Bradley (Ping Identity), और Nat Sakimura (NRI) द्वारा मई 2015 में RFC 7519 के रूप में मानकीकृत किया गया था। यह आधे दशक के काम की पराकाष्ठा थी: पहला JWT इंटरनेट-ड्राफ्ट दिसंबर 2010 में दिखाई दिया, जो SAML 2.0 (2005) के भारी XML-आधारित अभिकथन प्रारूप और कुछ हल्के की महसूस की गई आवश्यकता से उत्पन्न हुआ जिसे ब्राउज़र मूल रूप से पार्स कर सकें। सफलता XML के बजाय JSON और PEM के बजाय base64url चुनना थी: एक JWT URL क्वेरी स्ट्रिंग या Authorization: Bearer हेडर में फिट हो सकता था। पूरे JOSE परिवार को एक समन्वित सेट के रूप में भेजा गया: हस्ताक्षर के लिए RFC 7515 (JWS), एन्क्रिप्शन के लिए RFC 7516 (JWE), कुंजी प्रारूप के लिए RFC 7517 (JWK), एल्गोरिथम पहचानकर्ताओं के लिए RFC 7518 (JWA), और दावों की परत के लिए RFC 7519 (JWT), सभी मई 2015 के एक ही दिन। अपनाना तत्काल था। OAuth 2.0 (RFC 6749, 2012) ने एक्सेस टोकन को मानकीकृत किया था लेकिन उनके प्रारूप को अपारदर्शी छोड़ा था; उद्योग ने JWT चुना। OpenID Connect (दिसंबर 2014, OpenID फाउंडेशन) ने आईडी टोकन के लिए JWT को अनिवार्य बनाया। 2017 तक हर प्रमुख पहचान प्रदाता (Auth0, Okta, Azure AD, AWS Cognito, Google Identity, Firebase Auth) ने JWT को अपने मूल सत्र प्रारूप के रूप में जारी किया। JWT.io, वह डिकोडर वेबसाइट जिसे Auth0 ने 2014 में लॉन्च किया, वास्तविक JWT डिबगिंग टूल बन गई और प्रारूप की डेवलपर माइंडशेयर को सीमेंट करने में मदद की। दो सुरक्षा घटनाओं ने आधुनिक खतरे के मॉडल को आकार दिया: Tim McLean का 2015 खुलासा alg: none बायपास और HS/RS एल्गोरिथम-भ्रम हमले का, और CVE-2022-21449 (अप्रैल 2022), Java 15-18 के ECDSA सत्यापनकर्ता में Neil Madden का «Psychic Signatures» बग। दोनों ने लाइब्रेरी-डिफ़ॉल्ट सख्ती की: अधिकांश आधुनिक लाइब्रेरी अब alg: none को सीधे अस्वीकार करती हैं और टोकन हेडर से पढ़ने के बजाय अपेक्षित एल्गोरिथम को पिन करती हैं।

JWT की संरचना

व्यवहार में JWT का उपयोग कहाँ होता है

मानक और सुरक्षा मील के पत्थर

अधिक अक्सर पूछे जाने वाले प्रश्न

यह उपकरण हस्ताक्षर क्यों सत्यापित नहीं करता?

सत्यापन के लिए एक रहस्य (HMAC) या सार्वजनिक कुंजी (RSA / ECDSA / EdDSA) की आवश्यकता होती है। किसी भी वेबसाइट में एक उत्पादन HMAC रहस्य चिपकाना अपने आप में एक क्रेडेंशियल लीक है, यहाँ तक कि एक उपकरण पर भी जो शपथ लेता है कि वह कुछ भी प्रसारित नहीं करता है। सत्यापन एक सर्वर से संबंधित है जिसे आप नियंत्रित करते हैं। डिकोडर का काम सामग्री को पढ़ने योग्य बनाना है ताकि आप देख सकें कि आपके सत्यापनकर्ता को क्या जाँचना चाहिए

क्या यहाँ वास्तविक उत्पादन टोकन चिपकाना सुरक्षित है?

डिकोडिंग पूरी तरह से आपके ब्राउज़र में होती है। टोकन नेटवर्क पर नहीं भेजा जाता है, किसी भी लॉग पर नहीं लिखा जाता है, या कहीं भी संग्रहीत नहीं किया जाता है। ऐसा कहा जाता है, एक JWT अक्सर एक क्रेडेंशियल होता है: कोई भी जो एक अनपेक्षित एक्सेस टोकन रखता है वह उपयोगकर्ता के रूप में कार्य कर सकता है। समुदाय की परंपरा है «एक उत्पादन JWT को सत्र कुकी की तरह मानें»: जब आप कर सकते हैं तब परीक्षण टोकन पसंद करें, और किसी भी वास्तविक टोकन को घुमाएँ जिसे आपने ब्राउज़र सत्र के बाहर कहीं भी साझा किया हो जिसने इसे ढाला था।

मुझे ब्राउज़र में एक JWT कहाँ संग्रहीत करना चाहिए?

दो सामान्य पैटर्न में से प्रत्येक का एक ट्रेडऑफ है। localStorage सुविधाजनक है लेकिन पृष्ठ पर किसी भी सफल XSS हमले द्वारा पढ़ने योग्य है। HttpOnly वाले कुकीज़ JavaScript के लिए अदृश्य हैं इसलिए XSS उन्हें नहीं पढ़ सकता है, लेकिन CSRF से बचने के लिए उन्हें SameSite=Strict या SameSite=Lax की आवश्यकता है। वर्तमान सर्वोत्तम अभ्यास: JavaScript चर में अल्पकालिक एक्सेस टोकन (केवल मेमोरी) प्लस रिफ्रेश एंडपॉइंट पर स्कोप किए गए HttpOnly + Secure + SameSite=Strict कुकी में एक दीर्घकालिक रिफ्रेश टोकन, प्रत्येक उपयोग पर घुमाया गया।

हेडर में kid फ़ील्ड क्या करता है?

यह पहचानता है कि किस कुंजी ने टोकन पर हस्ताक्षर किए। आधुनिक पहचान प्रदाता अपनी सार्वजनिक कुंजियाँ /.well-known/jwks.json एंडपॉइंट पर एक JWK Set (RFC 7517) के रूप में प्रकाशित करते हैं; सत्यापनकर्ता उस कुंजी को देखता है जिसका kid टोकन के हेडर से मेल खाता है। यही है जो शून्य-डाउनटाइम कुंजी रोटेशन को संभव बनाता है: ग्रेस अवधि के दौरान पुरानी और नई दोनों कुंजियाँ JWKS में बैठ सकती हैं।

क्या मैं जारी किए जाने के बाद एक JWT को रद्द कर सकता हूँ?

मूल रूप से नहीं। एक हस्ताक्षरित JWT अपने exp दावे तक वैध है; वह बिना अवस्था के होना प्रारूप की हेडलाइन संपत्ति है। समाधान: एक्सेस टोकन को छोटा रखें (5-15 मिनट) एक रद्द करने योग्य रिफ्रेश टोकन के साथ जोड़ा गया; रद्द किए गए jti मानों की एक सर्वर-साइड अस्वीकृति सूची बनाए रखें; हस्ताक्षर कुंजी घुमाएँ (जो हर बकाया टोकन को अमान्य कर देता है जिस पर इसके साथ हस्ताक्षर किए गए हैं)। प्रत्येक विकल्प कुछ अवस्था को फिर से पेश करता है; यही व्यापार है।

क्या एक टोकन को डिकोड करना उसे डिक्रिप्ट करने के समान है?

नहीं। डिकोडिंग base64url को JSON में वापस उलट देती है: कोई भी इसे कर सकता है, और यही बात है। डिक्रिप्ट करने के लिए एक कुंजी की आवश्यकता होती है और केवल JSON Web Encryption (JWE, RFC 7516) पर लागू होती है, जो JOSE परिवार का एन्क्रिप्टेड वैरिएंट है। आप जंगली में जो अधिकांश टोकन देखते हैं वे JWS हैं (हस्ताक्षरित लेकिन एन्क्रिप्टेड नहीं), इसलिए डिकोडिंग उन्हें पढ़ने के लिए पर्याप्त है।

संबंधित टूल