JWT क्या है? JSON वेब टोकन की संपूर्ण व्याख्या
त्वरित जवाब
JWT तीन Base64URL-एन्कोडेड भागों वाली स्ट्रिंग है बिंदु से अलग: header.payload.signature। header algorithm निर्दिष्ट करता है, payload claims (user ID, roles, expiration) रखता है, signature authenticity सिद्ध करता है। हमारे मुफ्त JWT Decoder से टोकन सामग्री निरीक्षण करें।
परिचय
JWT (JSON Web Token) RFC 7519 द्वारा परिभाषित कॉम्पैक्ट, URL-safe टोकन फॉर्मेट है जो पक्षों के बीच सुरक्षित सूचना संचार के लिए है। JWT web अनुप्रयोगों में authentication के लिए व्यापक उपयोग होता है: login के बाद server JWT जारी करता है जो client बाद के request में भेजता है। JWT stateless हैं —server को डेटाबेस में टोकन खोजने की ज़रूरत नहीं; टोकन में claims और signature होता है।
क्रमशः
-
तीन भाग वाली संरचना को समझें
JWT के तीन भाग होते हैं: हेडर (एल्गोरिदम और प्रकार), पेलोड (दावा), और हस्ताक्षर (अखंडता साबित करता है)। प्रत्येक भाग Base64URL-एन्कोडेड है और बिंदुओं द्वारा अलग किया गया है: eyJhbGciOi...J9.eyJzdWIi...J9.signature. पहले दो भाग टोकन वाले किसी भी व्यक्ति द्वारा पढ़ने योग्य हैं; केवल हस्ताक्षर के लिए गुप्त कुंजी की आवश्यकता होती है।
-
मानक दावे जानें
पेलोड में दावे शामिल हैं - विषय के बारे में बयान। मानक दावे: 'उप' (विषय/उपयोगकर्ता आईडी), 'आईएटी' (टाइमस्टैम्प पर जारी), 'एक्सप' (समाप्ति), 'एनबीएफ' (पहले नहीं), 'आईएसएस' (जारीकर्ता), 'ऑड' (दर्शक)। कस्टम दावों में भूमिकाएँ, अनुमतियाँ या कोई अन्य डेटा शामिल हो सकता है।
-
हस्ताक्षर एल्गोरिदम को समझें
JWTs सममित (HS256 - साझा रहस्य) या असममित (RS256, ES256 - सार्वजनिक/निजी कुंजी जोड़ी) हस्ताक्षर का उपयोग करते हैं। हस्ताक्षर छेड़छाड़ को रोकता है: टोकन के किसी भी भाग को बदलने से हस्ताक्षर अमान्य हो जाता है। केवल गुप्त/निजी कुंजी धारक ही वैध टोकन बना सकता है।
-
प्रमाणीकरण के लिए JWTs का उपयोग करें
लॉगिन करने के बाद, सर्वर एक JWT बनाता है और इसे क्लाइंट को भेजता है। क्लाइंट बाद के अनुरोधों के लिए प्राधिकरण हेडर (बियरर टोकन) में JWT शामिल करता है। सर्वर हस्ताक्षर की पुष्टि करता है और समाप्ति की जाँच करता है - किसी डेटाबेस लुकअप की आवश्यकता नहीं है।
उदाहरण
__रखें_18__ संरचना
इनपुट: एक विशिष्ट JWT
उत्पादन: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature
डिकोड किया गया हेडर
इनपुट: पहला भाग डिकोड किया गया
उत्पादन: {"alg": "HS256", "typ": "JWT"}
डिकोडेड पेलोड
इनपुट: दूसरा भाग डिकोड किया गया
उत्पादन: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}
सामान्य समस्या
- डिकोडिंग बनाम सत्यापन - JWT को डिकोड करना (इसकी सामग्री को पढ़ना) यह साबित नहीं करता है कि यह प्रामाणिक है। दावों पर भरोसा करने से पहले हमेशा हस्ताक्षर सर्वर-साइड को गुप्त कुंजी से सत्यापित करें।
- JWTs को लोकलस्टोरेज में संग्रहीत करना - यह उन्हें जावास्क्रिप्ट तक पहुंच योग्य बनाता है, XSS हमलों के प्रति संवेदनशील बनाता है। बेहतर सुरक्षा के लिए httpOnly कुकीज़ में स्टोर करें।
- लंबे समय तक चलने वाले टोकन - यदि कोई टोकन चोरी हो जाता है, तो यह समाप्ति तक वैध रहता है। लंबे सत्रों के लिए ताज़ा टोकन के साथ अल्पकालिक एक्सेस टोकन (15-60 मिनट) का उपयोग करें।
- पेलोड में संवेदनशील डेटा - पेलोड टोकन वाले किसी भी व्यक्ति द्वारा पढ़ने योग्य है (यह Base64 है, एन्क्रिप्टेड नहीं है)। पेलोड में कभी भी पासवर्ड, क्रेडिट कार्ड या रहस्य न रखें।
सुझावों
- किसी भी दावे पर भरोसा करने से पहले हमेशा JWT हस्ताक्षर सर्वर-साइड को सत्यापित करें - अकेले डिकोडिंग प्रमाणीकरण नहीं है।
- टोकन चोरी से होने वाले नुकसान को कम करने के लिए लंबे सत्रों के लिए ताज़ा टोकन के साथ अल्पकालिक एक्सेस टोकन (15-60 मिनट) का उपयोग करें।
- XSS हमलों को रोकने के लिए JWTs को लोकलस्टोरेज के बजाय httpOnly, सिक्योर, सेमसाइट कुकीज़ में स्टोर करें।
- डिबगिंग के लिए टोकन सामग्री का निरीक्षण करने के लिए हमारे JWT डिकोडर का उपयोग करें - आपका टोकन कभी भी आपके ब्राउज़र को नहीं छोड़ता है।