YamlBox

वेब और एन्कोडिंग · 6 मिनट पढ़ें

JWT डिकोडर: टोकन के अंदर क्या है, और क्या नहीं है

एक JSON वेब टोकन डॉट्स द्वारा अलग किए गए तीन बेस 64url खंड हैं, और एक JWT डिकोडर बस एन्कोडिंग को उलट देता है ताकि आप उन्हें पढ़ सकें। उस अंतिम वाक्य में इस लेख का सबसे महत्वपूर्ण सुरक्षा तथ्य शामिल है: किसी टोकन को डिकोड करने से इसके बारे में कुछ भी साबित नहीं होता है। कोई भी पेलोड तैयार कर सकता है, उसे एन्कोड कर सकता है, और आपको एक अच्छी तरह से बना हुआ टोकन सौंप सकता है - सत्यापन एक अलग ऑपरेशन है जिसके लिए हस्ताक्षर कुंजी की आवश्यकता होती है।

अद्यतन

तीन भाग

  • हेडर - हस्ताक्षर एल्गोरिथ्म (`alg`) और टोकन प्रकार (`typ`), उदाहरण के लिए HS256।
  • पेलोड - दावे: टोकन किसके बारे में है, इसे कब जारी किया गया था और इसकी समय सीमा कब समाप्त होगी।
  • हस्ताक्षर - जारीकर्ता की कुंजी के साथ पहले दो खंडों पर गणना की जाती है, यही कारण है कि एक डिकोडर इसे दिखाता है लेकिन इसकी जांच नहीं कर सकता है।
                eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 . eyJzdWIiOiIxMjMiLCJleHAiOjE3NjAwMDAwMDB9 . signature
           header                            payload                       signature
              

वे दावे जो अधिकांश विफलताओं की व्याख्या करते हैं

  • `exp` (समाप्ति) - 401 का सबसे आम कारण। दो मिनट पहले समाप्त होने वाला टोकन किसी भी अन्य चीज़ की जांच करने से पहले अस्वीकार कर दिया जाता है।
  • `nbf` (पहले नहीं) - दर्पण छवि: इसकी वैधता विंडो से पहले उपयोग किया गया एक टोकन अस्वीकार कर दिया गया है।
  • `iat` (पर जारी) - यह पता लगाने के लिए उपयोगी है कि सत्र कितना पुराना है, और उन घड़ियों का पता लगाने के लिए जो असहमत हैं।
  • `aud` (दर्शक) और `iss` (जारीकर्ता) - यहां बेमेल का मतलब है कि टोकन वैध है लेकिन एक अलग सेवा के लिए जारी किया गया था, जो भ्रमित करने वाले तरीकों से विफल हो जाता है।

यूनिक्स युग के बाद से समय के दावे यूटीसी सेकंड हैं। यदि कोई टोकन वैध दिखता है लेकिन बहुत जल्दी या देर से समाप्त होता है, तो घड़ी की समस्या या मिलीसेकंड ले जाने वाले पेलोड की जांच करें जहां सेकंड अपेक्षित थे।

आपको कभी भी `alg` पर आँख बंद करके भरोसा क्यों नहीं करना चाहिए

दो हमले काफी पुराने हैं और प्रसिद्ध हैं और अब भी जंगल में दिखाई देते हैं। `none` एल्गोरिथम सत्यापनकर्ता को बताता है कि कोई हस्ताक्षर नहीं है; एक सर्वर जो अपने स्वयं के अपेक्षित एल्गोरिदम को लागू करने के बजाय हेडर को पढ़ता है, उसे स्वीकार करता है। और आरएसए/एचएस भ्रम में, एक हमलावर सार्वजनिक कुंजी के साथ एचएमएसी रहस्य के रूप में हस्ताक्षर करता है, एक सर्वर को धोखा देता है जो दोनों परिवारों को स्वीकार करता है। दोनों मामलों में बचाव सत्यापनकर्ता में रहता है, डिकोडर में नहीं: अपेक्षित एल्गोरिदम सर्वर-साइड को पिन करें और इसे कभी भी टोकन से प्राप्त न करें।

हमेशा स्थानीय स्तर पर डिकोड करें

JWT एक क्रेडेंशियल है: जो कोई भी इसे धारण करता है वह इसके समाप्त होने तक उपयोगकर्ता के रूप में कार्य कर सकता है। एक वास्तविक को एक वेबसाइट में चिपकाना जो इसे सर्वर पर पोस्ट करता है, शून्य लाभ के लिए एक लाइव सत्र सौंपता है, क्योंकि डिकोडिंग बेस 64url अंकगणित है जिसे कोई भी ब्राउज़र माइक्रोसेकंड में कर सकता है। YamlBox JWT डिकोडर पृष्ठ में टोकन को पार्स करता है, टाइमस्टैम्प दावों को पढ़ने योग्य UTC तिथियों के रूप में दिखाता है, और अक्षम नेटवर्क के साथ काम करता रहता है - उत्पादन टोकन पर उपयोग करने लायक एकमात्र प्रकार का डिकोडर।

एक डिबगिंग रूटीन जो काम करता है

  1. पहले `exp` को डिकोड करें और पढ़ें - सभी "अमान्य टोकन" रिपोर्टों में से आधी यहीं समाप्त होती हैं।
  2. API क्या अपेक्षा करता है उसके विरुद्ध `aud` और `iss` की जाँच करें, फिर घड़ी की गड़बड़ी के लिए `nbf` की जाँच करें।
  3. डिकोड किए गए दावों की तुलना भूमिकाओं या दायरे के बारे में आपके कोड की धारणा से करें।
  4. यदि दावे सही दिखते हैं और यह अभी भी विफल रहता है, तो समस्या सत्यापन है - गलत कुंजी, घुमाया गया रहस्य, या एल्गोरिदम बेमेल।

JWT डिकोडर - अक्सर पूछे जाने वाले प्रश्न

क्या JWT को डिकोड करने से इसकी पुष्टि होती है?

नहीं, डिकोडिंग बेस64यूआरएल एन्कोडिंग को उलट देती है और इसके लिए किसी कुंजी की आवश्यकता नहीं होती है, इसलिए यह प्रामाणिकता साबित नहीं कर सकती है। सत्यापन जारीकर्ता की गुप्त या सार्वजनिक कुंजी के साथ हस्ताक्षर की पुन: गणना करता है और यह एक अलग चरण है जिसे केवल सर्वर ही निष्पादित कर सकता है।

मेरा JWT पहले ही क्यों समाप्त हो चुका है?

वर्तमान UTC समय के विरुद्ध `exp` दावे की जाँच करें। टोकन आम तौर पर अल्पकालिक होते हैं - मिनटों से एक घंटे तक - और एक क्लाइंट जो ताज़ा विंडो में इसे कैश करता है वह सामान्य अपराधी होता है। जारीकर्ता द्वारा इच्छित जीवनकाल देखने के लिए `iat` की तुलना `exp` से करें।

क्या किसी प्रोडक्शन JWT को ऑनलाइन डिकोडर में पेस्ट करना सुरक्षित है?

केवल एक में जो पूरी तरह से आपके ब्राउज़र में डीकोड हो जाता है। एक सर्वर-साइड डिकोडर एक लाइव क्रेडेंशियल प्राप्त करता है और इसे लॉग कर सकता है। क्लाइंट-साइड डिकोडर को प्राथमिकता दें, और किसी अज्ञात साइट पर आपके द्वारा चिपकाए गए किसी भी टोकन को समझौता किए गए के रूप में मानें।

इस पोस्ट में उल्लिखित उपकरण

19 टूल की पूरी सूची ब्राउज़ करें

पढ़ने के लिए और लेख

5 मिनट पढ़ें

Base64 डिकोड और एनकोड: परिवहन के लिए, सुरक्षा के लिए नहीं

Base64 ब्राउज़र में डिकोड और एनकोड करें - 4/3 आकार नियम, पैडिंग, बेस 64url वैरिएंट और यूनिकोड बग जो डिकोड किए गए टेक्स्ट को कचरे जैसा बना देता है।

5 मिनट पढ़ें

URL एन्कोडिंग: कब बचना है, और कब आप चीज़ों को तोड़ रहे हैं

URL एनकोड और डीकोड सही ढंग से - आरक्षित वर्ण, प्लस बनाम %20, एनकोडयूआरआई बनाम एनकोडयूआरआईकंपोनेंट, और टूटे हुए लिंक के पीछे डबल-एन्कोडिंग बग।

5 मिनट पढ़ें

टाइमस्टैम्प कनवर्टर: अनुमान के बिना युग का समय

एक यूनिक्स टाइमस्टैम्प कनवर्टर जो दोनों तरीकों से काम करता है - सेकंड बनाम मिलीसेकंड, यूटीसी बनाम स्थानीय समय, और 2038 सीमा जो अभी भी लंबे समय तक चलने वाले सिस्टम को तोड़ती है।

सभी 19 पोस्ट →