डेवलपर टूल · JWT डिकोडर
Base64 और जेक्UK साथ JWT पेलोड को हाथ से कैसे डिकोड करें
· यह काम किस प्रकार करता है
जेडब्ल्यूटी कमांड-लाइन डेवलपर-वर्कफ़्लो
हेडलेस बॉक्स पर आप अभी भी कट, टीआर, Base64 और जेक्UK साथ एक टोकन पढ़ सकते हैं। यह पोस्ट आदेश देता है, प्रत्येक द्वारा किए जाने वाले Base64url रूपांतरण की व्याख्या करता है, और नुकसान सूचीबद्ध करता है।
SSH पर टोकन पढ़ना - जब ब्राउज़र कोई विकल्प नहीं है
एक हेडलेस सर्वर आपको टोकन-आकार की स्ट्रिंग और बिना ब्राउज़र UI के छोड़ सकता है। आवश्यक निरीक्षण कार्य अभी भी छोटा है: एक खंड को अलग करें, Base64url वर्तनी का अनुवाद करें, पैडिंग पुनर्स्थापित करें, बाइट्स को डीकोड करें और JSON को पार्स करें। खतरा कम्प्यूटेशनल के बजाय परिचालनात्मक है क्योंकि शेल इतिहास एक जीवित क्रेडेंशियल को संरक्षित कर सकता है।
जब भी संभव हो समाप्त हो चुके या सिंथेटिक टोकन का उपयोग करें। यदि घटना की प्रतिक्रिया के लिए वास्तविक मूल्य की जांच की आवश्यकता होती है, तो अपने संगठन के क्रेडेंशियल-हैंडलिंग नियंत्रणों का पालन करें, इसे साझा इतिहास या लॉग में प्रवेश करने से रोकें और एक्सपोज़र के बाद इसे घुमाएँ। कमांड-लाइन डिकोडिंग केवल निरीक्षण ही रहता है; यह कोई सत्यापन कुंजी या विश्वास नीति प्रदान नहीं करता है।
बिंदुओं पर विभाजन - पेलोड खंड को अलग करने के लिए कट या ऑक
एक कॉम्पैक्ट JWS-आकार वाले JWT में तीन बिंदु-पृथक फ़ील्ड हैं। पेलोड दूसरा है. एक शेल इसे एक सीमांकक-जागरूक टूल के साथ विभाजित कर सकता है, लेकिन चर को उद्धृत करता है ताकि शेल वर्णों का विस्तार न करे या रिक्त स्थान को विभाजित न करे। फ़ील्ड चुनने से पहले अग्रणी `Bearer ` लेबल हटा दें क्योंकि वह उपसर्ग HTTP सिंटैक्स से संबंधित है।
आँख मूँद कर फ़ील्ड दो लेने के बजाय फ़ील्ड गिनें। ToolAcre तीन भागों के अलावा किसी भी चीज़ को अस्वीकार करता है और पांच-भाग वाले एन्क्रिप्टेड इनपुट को अलग से पहचानता है। एक शेल पाइपलाइन को समान संरचनात्मक सावधानी बरतनी चाहिए; विकृत इनपुट से एक खंड प्राप्त करने से प्रशंसनीय JSON उत्पन्न हो सकता है जबकि यह छिपाया जा सकता है कि मूल टोकन काट दिया गया था।
वर्णमाला को परिवर्तित करना - हाइफ़न और अंडरस्कोर को वापस प्लस और स्लैश में बदलने के लिए tr
मानक कमांड-लाइन Base64 कार्यान्वयन आमतौर पर प्लस और स्लैश की अपेक्षा करते हैं जहां JWT सेगमेंट में हाइफ़न और अंडरस्कोर हो सकता है। `-` को `+` और `_` को `/` में अनुवाद करने से URL-सुरक्षित प्रतीकों को छह-बिट मानों को बदले बिना उनकी मानक स्थिति में वापस मैप किया जाता है।
एक अनुवाद कमांड का उपयोग करें जिसका विकल्प पार्सिंग एक ध्वज के लिए अग्रणी हाइफ़न को गलती से नहीं कर सकता है, और डेटा को उद्धृत चर या मानक इनपुट में रखें। वर्णमाला रूपांतरण प्रतिवर्ती एन्कोडिंग कार्य है। यह दावों को डिक्रिप्ट नहीं करता है, और सफलता यह स्थापित नहीं करती है कि टोकन नामित जारीकर्ता से आया है।
पैडिंग को पुनर्स्थापित करना - वह अंकगणित जो समान चिह्नों की सही संख्या जोड़ता है
अनुवाद के बाद, लंबाई मॉड्यूलो चार की गणना करें। शेष शून्य के लिए किसी समान चिन्ह की आवश्यकता नहीं है, शेष दो के लिए दो की आवश्यकता है, और शेष तीन के लिए एक की आवश्यकता है। शेष एक ट्रंकेशन को इंगित करता है और पाइपलाइन को रोकना चाहिए। जब तक कोई उपयोगिता शिकायत करना बंद नहीं कर देती तब तक मनमानी पैडिंग लगाने से क्षति का निदान करने के बजाय उसे छिपाया जा सकता है।
ToolAcre `base64ToBytes` में बिल्कुल इसी लंबाई नियम का उपयोग करता है और असंभव शेषफल को अस्वीकार करता है। शेल उपयोगिताएँ इस बात में भिन्न होती हैं कि वे छोड़ी गई पैडिंग को स्वीकार करते हैं या नहीं, इसलिए पहले इनपुट को सामान्य करने से पाइपलाइन अवधारणा में स्पष्ट और पोर्टेबल हो जाती है, हालाँकि ऑपरेटिंग सिस्टम के बीच कमांड फ़्लैग अभी भी भिन्न हो सकते हैं।
डिकोडिंग और प्रीटी-प्रिंटिंग - Base64 -d को jq में डाला गया
गद्देदार मान को प्लेटफ़ॉर्म के Base64 डिकोडर और फिर `jq` पर पाइप करें। पहला आदेश बाइट्स पुनर्प्राप्त करता है; दूसरे को JSON बनाने के लिए उन बाइट्स की आवश्यकता होती है। एक सफल Base64 कमांड के बाद जेक्यू पार्स त्रुटि का मतलब है कि एन्कोडिंग संरचनात्मक रूप से डिकोड करने योग्य थी लेकिन इसकी सामग्री JSON पेलोड नहीं थी।
वह अंतर ToolAcre के त्रुटि पथ को दर्शाता है। यह पहले अमान्य Base64url या UTF-8 की रिपोर्ट करता है, फिर अलग से अमान्य JSON की रिपोर्ट करता है, फिर शून्य, सरणियों और प्राइमिटिव को अस्वीकार कर देता है क्योंकि JWT हेडर या पेलोड इस टूल के लिए एक ऑब्जेक्ट होना चाहिए। चरणों को अलग-अलग रखने से विफलता कार्रवाई योग्य हो जाती है।
कार्यान्वित उदाहरण - एक नमूना टोकन पर पूरी पाइपलाइन, प्रत्येक चरण पर आउटपुट के साथ
सिंथेटिक उदाहरण के लिए, पेलोड सेगमेंट `eyJzdWIiOiJkZW1vIiwicm9sZSI6InJlYWRlciJ9` को किसी वर्णमाला अनुवाद या पैडिंग की आवश्यकता नहीं है। डिकोडिंग से `{"sub":"demo","role":"reader"}` प्राप्त होता है, और jq उस ऑब्जेक्ट को लाइनों के पार प्रारूपित करता है। दृश्यमान भूमिका केवल टोकन द्वारा आपूर्ति की गई एक स्ट्रिंग है।
अब JSON को बदलें, इसे फिर से एन्कोड करें और कोई तीसरा खंड संलग्न करें। पाइपलाइन अभी भी परिवर्तित वस्तु को प्रिंट करती है। यह साबित करता है कि एक डिकोड कमांड वैधता जांच के रूप में काम क्यों नहीं कर सकता है: वैध और मनगढ़ंत दावे दोनों समान सार्वजनिक परिवर्तनों को पार करते हैं जब तक कि एक अलग सत्यापनकर्ता हस्ताक्षर की जांच नहीं करता है।
नुकसान - शेल इतिहास टोकन कैप्चरिंग, Base64 कार्यान्वयन जो लापता पैडिंग को अस्वीकार करता है, और एक अग्रणी 'बियरर' के साथ टोकन
सामान्य विफलताओं में HTTP उपसर्ग को बनाए रखना, गलत बिंदु-पृथक फ़ील्ड का चयन करना, प्रतिलिपि बनाने के दौरान अनुवर्ती वर्णों को खोना और Base64 कार्यान्वयन का उपयोग करना शामिल है जिसके लिए पैडिंग की आवश्यकता होती है। एक और ख़तरा पूरे टोकन को सीधे कमांड लाइन पर रखना है, जहां प्रक्रिया सूची या इतिहास इसे बनाए रख सकता है।
उचित नियंत्रण के तहत मानक इनपुट और अल्पकालिक चर को प्राथमिकता दें, और सुविधा के लिए चैट, टिकट या साझा टर्मिनलों में कभी भी उत्पादन टोकन पेस्ट न करें। यह भी याद रखें कि तीसरा खंड JSON के बजाय बाइनरी हस्ताक्षर सामग्री है, इसलिए इसे jq के माध्यम से भेजना विफल हो जाना चाहिए और आपको हस्ताक्षर वैधता के बारे में कुछ नहीं बताता है।
टेकअवे: समान डिकोडिंग, कोई भी वातावरण - जब आपके पास ब्राउज़र होता है, तो ToolAcre JWT डिकोडर स्थानीय रूप से कुछ भी अपलोड किए बिना ऐसा करता है
शेल पाइपलाइन और ToolAcre विभिन्न वातावरणों में समान डिकोड-केवल अनुक्रम निष्पादित करते हैं: विभाजित, सामान्यीकृत, पैड, डिकोड UTF-8 और पार्स JSON। जिस भी वातावरण का आप निरीक्षण और नियंत्रण कर सकते हैं उसका उपयोग करें, गैर-संवेदनशील डेटा को डिफ़ॉल्ट के रूप में रखें।
न तो पथ प्रामाणिकता की पुष्टि करता है और न ही कॉल करने वाले को अधिकृत करता है। पेलोड आकार को पढ़ने के बाद, सेवा के विश्वसनीय सत्यापनकर्ता के पास जाएँ और क्रिप्टोग्राफ़िक और नीतिगत निर्णयों के लिए लॉग करें। एक कमांड जो सुंदर JSON उत्पन्न करती है, उसने एक फ़ॉर्मेटिंग कार्य पूरा कर लिया है, सुरक्षा निर्णय नहीं।