JWT एनकोडर / डिकोडर
टोकन पेस्ट करके उसका हेडर और पेलोड पढ़ें, या अपने क्लेम्स से एक साइन करें — कोई बटन नहीं, कोई अपलोड नहीं।
डिकोड करते समय वैकल्पिक (जाँचने के लिए भरें), साइन करने के लिए ज़रूरी।
सिग्नेचर:
टोकन
हेडर
पेलोड
इसका उपयोग कैसे करें
- टोकन पेस्ट करें: हेडर और पेलोड तुरंत दिखते हैं, दबाने के लिए कोई बटन नहीं। टोकन से आया कुछ भी ठीक वैसा ही रहता है जैसा साइन हुआ था — इनपुट कभी दोबारा नहीं लिखा जाता।
- सिग्नेचर जाँचने के लिए इनपुट के नीचे सीक्रेट जोड़ें। खाली छोड़ने का अर्थ सिर्फ़ “जाँचा नहीं गया” है: आप फिर भी क्लेम्स वैसे ही पढ़ते हैं।
- एनकोड करें पर जाएँ, अपने क्लेम्स JSON में लिखें, HS256/384/512 और सीक्रेट चुनें, और जो टोकन निकले उसे कॉपी करें। मोड बदलने पर आपका लिखा कभी नहीं मिटता।
- मानक exp / iat / nbf क्लेम्स आपकी भाषा और टाइम ज़ोन में खोलकर लिखे जाते हैं, समाप्त और अभी मान्य न होने के चिह्नों के साथ।
उदाहरण
टोकन
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTEwMjQiLCJuYW1lIjoiSmFuZSBDb29wZXIiLCJyb2xlIjoiZWRpdG9yIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6MTc5ODc2MTYwMH0.jCqliF6m-TAglXcHrjuXj7kYIjjsRO7kv6_8O1yb_7Q
हेडर और पेलोड
हेडर
{
"alg": "HS256",
"typ": "JWT"
}
पेलोड
{
"sub": "u-1024",
"name": "Jane Cooper",
"role": "editor",
"iss": "https://api.example.com",
"iat": 1767225600,
"exp": 1798761600
}सीक्रेट “dev-secret-change-me” से साइन किया गया; उसे सीक्रेट में लिखें और स्थिति पंक्ति “सिग्नेचर सत्यापित” हो जाती है। एनकोड करें पर जाकर नमूना दबाएँ तो वही पेलोड मिलता है: उसी सीक्रेट के साथ यह ठीक यही टोकन, कैरेक्टर-दर-कैरेक्टर दोबारा बनाता है।
नियम, सीमाएँ और ज्ञात समस्याएँ
- सिर्फ़ HS256, HS384 और HS512 समर्थित हैं, साइन करने और जाँचने दोनों के लिए। RS*, ES* और PS* टोकन डिकोड होकर जैसे हैं वैसे दिखते हैं, पर उनका सिग्नेचर कभी नहीं जाँचा जाता — उसके लिए सार्वजनिक कुंजी चाहिए, इसलिए स्थिति पंक्ति अनुमान लगाने के बजाय यही बताती है।
- बिना साइन किए टोकन (alg: none) डिकोड होते हैं और साफ़ चिह्नित होते हैं, पर कभी बनाए नहीं जाते: बिना सीक्रेट साइन करने को कहने पर बिना साइन टोकन नहीं, त्रुटि मिलती है।
- एनकोडिंग हेडर खुद बनाती है (`{"alg": … ,"typ": "JWT"}`)। kid, jku, x5c या cty जैसे हेडर फ़ील्ड आगे नहीं ले जाए जाते — यह टूल क्लेम्स साइन करता है, सर्टिफ़िकेट चेन नहीं।
- साइन करने से पहले आपका क्लेम्स JSON छोटा करके दोबारा लिखा जाता है, इसलिए इंडेंटेशन और कमेंट टोकन से बाहर रहते हैं। कुंजियों का क्रम JavaScript ऑब्जेक्ट जैसा होता है: दोहराई गई कुंजियाँ आख़िरी वाली पर सिमट जाती हैं, और संख्या जैसी कुंजियाँ आगे आ जाती हैं।
- बहुत बड़ी पूर्ण संख्याओं की परिशुद्धता चली जाती है — `12345678901234567890` राउंड होकर लौटता है, क्योंकि JavaScript संख्याएँ ऐसा ही करती हैं। कुछ चुपचाप ठीक नहीं किया जाता; ठीक अंक चाहिए तो स्ट्रिंग इस्तेमाल करें।
- क्लेम्स पढ़ने के लिए इंडेंट करके दिखाए जाते हैं, जबकि सिग्नेचर टोकन में मौजूद कच्चे हिस्सों को ठीक वैसे ही कवर करता है। पीठ पीछे कुछ दोबारा एनकोड नहीं होता, इसलिए जो टोकन यहाँ सत्यापित होता है वह आपके अपने कोड में भी होगा।
- Base64url सख़्त है: `+`, `/` और `=` चुपचाप स्वीकारने के बजाय त्रुटि बताए जाते हैं, और जो बाइट UTF-8 नहीं हैं वे रिप्लेसमेंट कैरेक्टर से बदलने के बजाय बताए जाते हैं। पेस्ट किए टोकन के अंदर का स्पेस नज़रअंदाज़ होता है, क्योंकि टोकन में वह कभी होता ही नहीं।
- एन्क्रिप्ट किए JWE (पाँच हिस्से) डिक्रिप्ट नहीं होते — आपको बताया जाता है कि आपने वही पेस्ट किया है।
- आकार सीमा 10,000 कैरेक्टर। कुछ भी अपलोड, संग्रहीत, URL में लिखा या साझा नहीं होता: शेयर बटन सिर्फ़ इस पेज का पता साझा करता है, आपका टोकन या सीक्रेट कभी नहीं।
संबंधित टूल
क्लेम्स पढ़ लेने के बाद आमतौर पर यही अगला कदम होता है।