हिन्दी

डेवलपर टूल · JWT डिकोडर

Base64 बनाम Base64url: मानक Base64 डिकोडर में JWT विफल क्यों होता है

· यह काम किस प्रकार करता है

जेडब्ल्यूटी Base64 एन्कोडिंग

दो एन्कोडिंग अक्षर डिकोड किए गए JWT बाइट्स पर एकत्रित हो रहे हैं
मूल ToolAcre वेक्टर चित्रण

एक JWT सेगमेंट को एक साधारण Base64 डिकोडर में चिपकाएँ और यह वर्णों या पैडिंग के बारे में शिकायत कर सकता है। यह पोस्ट Base64url वैरिएंट JWS मैंडेट और दोनों के बीच कन्वर्ट करने के तरीके के बारे में बताती है।

अमान्य वर्ण, गलत पैडिंग - त्रुटियाँ जो तब दिखाई देती हैं जब Base64, Base64url से मिलता है

एक "अमान्य वर्ण" या "गलत पैडिंग" संदेश का अक्सर मतलब होता है कि एक JWT सेगमेंट एक डिकोडर को दिया गया था जो सामान्य Base64 की अपेक्षा करता है। टोकन को सही ढंग से कॉपी किया जा सकता है। इसका प्रतिनिधित्व Base64url सम्मेलनों का पालन करता है, जबकि प्राप्त उपयोगिता संबंधित लेकिन समान वर्णमाला को स्वीकार नहीं करती है या स्पष्ट पैडिंग पर जोर देती है।

ToolAcre हेडर और पेलोड के लिए उस बेमेल से बचाता है। इसका बाइट डिकोडर व्हाइटस्पेस को हटा देता है, URL-सुरक्षित प्रतीकों का अनुवाद करता है, जब लंबाई इसकी अनुमति देती है तो छोड़ी गई पैडिंग को पुनर्स्थापित करता है, फिर बाइट्स को सख्त UTF-8 के रूप में परिवर्तित करता है। किसी भी स्तर पर विफलता एक अपरिष्कृत ब्राउज़र अपवाद के बजाय INVALID_JWT त्रुटि बन जाती है।

दो अक्षर - प्लस और स्लैश बनाम हाइफ़न और अंडरस्कोर, और URL ने बदलाव को क्यों मजबूर किया

मानक Base64 अपने अंतिम दो वर्णमाला पदों के लिए प्लस और स्लैश का उपयोग करता है। Base64url उन्हीं स्थितियों के लिए हाइफ़न और अंडरस्कोर निर्दिष्ट करता है। अंतर्निहित छह-बिट मान नहीं बदलते हैं, इसलिए `-` को `+` और `_` से `/` में अनुवाद करने से प्रत्येक डिकोडेड बाइट सुरक्षित रहता है; केवल परिवहन-सुरक्षित वर्तनी बदलती है।

वे प्रतिस्थापन उन चैनलों में मायने रखते हैं जहां प्लस या स्लैश में पहले से ही वाक्यविन्यास है। URL-सुरक्षित वर्तनी प्रपत्र या पथ प्रसंस्करण द्वारा आकस्मिक व्याख्या को कम करती है। इसमें गोपनीयता, अखंडता या प्रामाणिकता नहीं जोड़ी गई है। जो कोई भी खंड प्राप्त करता है वह प्रतिस्थापनों को उलट सकता है और क्रिप्टोग्राफ़िक कुंजी के बिना समान बाइट्स पुनर्प्राप्त कर सकता है।

पैडिंग - क्यों JWS बराबर चिह्नों को हटा देता है और एक सख्त डिकोडर के लिए उन्हें कैसे पुनर्स्थापित किया जाए

ToolAcre छोड़े गए पैडिंग को स्वीकार करता है। वर्णमाला सामान्यीकरण के बाद, यह खंड लंबाई मॉड्यूलो चार की जांच करता है। दो के शेष के लिए दो समान चिन्हों की आवश्यकता होती है, और तीन के शेष के लिए एक की आवश्यकता होती है। संपूर्ण Base64 मान के लिए किCAक का शेष रहना असंभव है और इसे आकार में अनुमान लगाने के बजाय एक काटे गए स्ट्रिंग के रूप में खारिज कर दिया जाता है।

पैडिंग रिकवरी मैकेनिकल फ़्रेमिंग है, टोकन मरम्मत नहीं। समान चिह्न जोड़ने से प्रतिलिपि के दौरान खोए गए वर्णों को पुनर्स्थापित नहीं किया जा सकता है, और सफल बाइट डिकोडिंग यह नहीं दिखाती है कि बाइट्स किसी जारीकर्ता से आए हैं। कार्यान्वयन केवल `atob` को कॉल करने से पहले ब्राउज़र डिकोडर द्वारा आवश्यक कैनोनिकल लंबाई का पुनर्निर्माण करता है।

पूरे टोकन को एक बार में डिकोड करना - पहले बिंदुओं पर विभाजित न करने की गलती

किसी भी खंड को डिकोड करने से पहले एक कॉम्पैक्ट हस्ताक्षरित टोकन को उसके बिंदुओं पर विभाजित किया जाना चाहिए। Base64 फ़ंक्शन में `header.payload.signature` पास करने से ऐसे बिंदु सामने आते हैं जो JWT क्रमांकन से संबंधित होते हैं, न कि Base64 वर्णमाला से। ToolAcre को इस JWS आकार के इनपुट के लिए ठीक तीन खंडों की आवश्यकता होती है और वह संरचना अनुपस्थित होने पर देखी गई गिनती की रिपोर्ट करता है।

पांच-भाग वाले मामले को एक अलग JWE संदेश प्राप्त होता है क्योंकि एन्क्रिप्टेड कॉम्पैक्ट क्रमांकन एक ही ऑब्जेक्ट नहीं है। इसके बजाय दो या चार भाग काट-छांट या गलत इनपुट का सुझाव देते हैं। यह संरचनात्मक जाँच JSON व्याख्या से पहले आती है, जो प्रतिलिपि त्रुटि को विकृत एन्कोडेड पाठ या विकृत JSON से अलग रखती है।

कार्यान्वित उदाहरण - एक खंड को Base64url से Base64 में परिवर्तित करना, उसे पैड करना और उसे JSON पर डिकोड करना

कार्यान्वित रूपांतरण के लिए, `eyJhbGciOiJIUzI1NiJ9` लें। इसमें कोई वर्णमाला वर्ण नहीं है जो वेरिएंट के बीच भिन्न हो, लेकिन इसकी गुम पैडिंग अभी भी पाइपलाइन को दर्शाती है। इसकी लंबाई पैडिंग बहाली की अनुमति देती है; डिकोडिंग से `{"alg":"HS256"}` के लिए UTF-8 बाइट्स प्राप्त होते हैं, और JSON पार्सिंग से एक `alg` प्रॉपर्टी के साथ एक ऑब्जेक्ट उत्पन्न होता है।

हाइफ़न या अंडरस्कोर वाला खंड पहले दो प्रतीक प्रतिस्थापनों के साथ समान अनुक्रम का अनुसरण करता है। ToolAcre इन परिचालनों को `base64ToBytes` के अंदर निष्पादित करता है, फिर `decodeSegment` परिणामी पाठ को पार्स करता है। प्रदर्शित एल्गोरिदम वही है जो असत्यापित हेडर घोषित करता है; इसे सत्यापन नीति के रूप में नहीं चुना गया है.

दावों में यूनिकोड - नामों को सही ढंग से प्रदर्शित करने के लिए डिकोड किए गए बाइट्स को UTF-8 के रूप में क्यों पढ़ा जाना चाहिए

दावों में उच्चारण, CJK अक्षर या इमोजी शामिल हो सकते हैं। Base64 बाइट्स पर काम करता है, इसलिए प्रत्येक डिकोडेड बाइट को एक स्वतंत्र कैरेक्टर के रूप में मानने से मल्टीबाइट टेक्स्ट दूषित हो जाता है। सही पथ प्रतीकों को बाइट्स में एन्कोड किया गया है, फिर एक UTF-8 डिकोडर। ToolAcre घातक मोड के साथ `TextDecoder` का निर्माण करता है इसलिए अमान्य UTF-8 ज़ोर से विफल हो जाता है।

परीक्षण `Zoë 世界 🙂` युक्त पेलोड को कवर करते हैं और डिकोडिंग के बाद सटीक स्ट्रिंग की अपेक्षा करते हैं। वह परिणाम साबित करता है कि बाइट-टू-टेक्स्ट पाइपलाइन ने इस परीक्षण मान को संरक्षित किया है। यह अभी भी इस बारे में कुछ नहीं कहता है कि पेलोड द्वारा नामित व्यक्ति मौजूद है या नहीं, क्या जारीकर्ता ने दावे को मंजूरी दे दी है या टोकन बदल दिया गया है या नहीं।

इसमें क्या शामिल नहीं है - हस्ताक्षर खंड, जो पाठ के बजाय बाइट्स को डिकोड करता है और किसी भी चीज़ का मतलब निकालने के लिए एक कुंजी की आवश्यकता होती है

हस्ताक्षर खंड JSON पथ के बाहर है। ToolAcre अपना मूल एन्कोडेड रूप रखता है और केवल डिकोड की गई बाइट लंबाई को मापने का प्रयास करता है। अमान्य हस्ताक्षर Base64 एक चेतावनी उत्पन्न करता है लेकिन हेडर और पेलोड निरीक्षण को नहीं रोकता है; एक खाली तीसरा खंड एक अलग चेतावनी उत्पन्न करता है कि कोई हस्ताक्षर बाइट मौजूद नहीं है।

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

टेकअवे: एक डिकोडर का उपयोग करें जो Base64url बोलता है - ToolAcre JWT डिकोडर हेडर और पेलोड के लिए वर्णमाला और पैडिंग को संभालता है

जब तत्काल कार्य JSON का निरीक्षण कर रहा हो तो ऐसे डिकोडर का उपयोग करें जो Base64url को समझता हो। ToolAcre पहले दो खंडों के लिए वर्णमाला, छोड़ी गई पैडिंग, सख्त UTF-8 और केवल ऑब्जेक्ट JSON को संभालता है। यह असंभव लंबाई को भी अस्वीकार करता है और संदेशों में पार्स विफलताओं को लपेटता है जो पहचानता है कि हेडर या पेलोड विफल हुआ या नहीं।

उस सीमा पर रुकें. एक साफ़ डिकोड का मतलब है कि स्ट्रिंग में पुनर्प्राप्त करने योग्य बाइट्स और उपयुक्त JSON ऑब्जेक्ट थे। इसका मतलब यह नहीं है कि उसके दावे भरोसेमंद, प्रमाणित, अधिकृत या असंशोधित हैं। केवल एक अलग से कॉन्फ़िगर किया गया सत्यापनकर्ता ही उन प्रश्नों का उत्तर दे सकता है, और यह ब्राउज़र टूल जानबूझकर कोई सत्यापन ऑपरेशन नहीं दिखाता है।