JWT क्या है? JSON Web Token समझें

JSON Web Token (JWT, उच्चारण "जॉट") एक कॉम्पैक्ट स्ट्रिंग है जो क्लेम का सेट — जैसे "यह यूज़र 42 है, admin रोल के साथ, 15:00 तक वैध" — और एक क्रिप्टोग्राफ़िक सिग्नेचर साथ लेकर चलती है, जिससे रिसीवर जाँच सकता है कि क्लेम किसी भरोसेमंद जारीकर्ता ने दिए हैं और उनमें बदलाव नहीं हुआ। JWT API ऑथेंटिकेशन, OAuth 2.0 एक्सेस टोकन और OpenID Connect ID टोकन का स्टैंडर्ड फ़ॉर्मेट है।

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

JWT के तीन हिस्से

JWT डॉट से अलग किए तीन Base64URL-एन्कोडेड सेगमेंट हैं: header.payload.signature। Base64URL यानी URL-सेफ़ कैरेक्टर वाला और बिना पैडिंग का Base64, ताकि टोकन हेडर, क्वेरी स्ट्रिंग और कुकी में जा सके।

  • हेडर — टोकन टाइप और साइनिंग एल्गोरिदम बताने वाला JSON, जैसे {"alg": "HS256", "typ": "JWT"}। इसमें kid (key id) भी हो सकता है जो वेरिफ़ायर को बताता है कौन-सी key इस्तेमाल करनी है।
  • पेलोड — JSON ऑब्जेक्ट के रूप में क्लेम। यहाँ कुछ भी रखा जा सकता है, लेकिन यह सिर्फ़ एन्कोडेड है, एन्क्रिप्टेड नहीं: जिसके पास टोकन है वह इसे पढ़ सकता है।
  • सिग्नेचर — हेडर में बताए एल्गोरिदम से एन्कोडेड हेडर और पेलोड पर कैलकुलेट किया जाता है। HS256 शेयर्ड सीक्रेट (HMAC) इस्तेमाल करता है; RS256 और ES256 साइन करने के लिए प्राइवेट key और वेरिफ़ाई करने के लिए पब्लिक key।
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiI0MiIsIm5hbWUiOiJMYXlsYSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTc1NjcwMDAwMCwiZXhwIjoxNzU2NzAzNjAwfQ
.4l3Y2cYpXqZ0cVZ5m4Q8n1fGx0y8s3oT0kq4rV7cWvA

header  → {"alg":"HS256","typ":"JWT"}
payload → {"sub":"42","name":"Layla","role":"admin","iat":1756700000,"exp":1756703600}

आज़माएँ: JWT डिकोडर

स्टैंडर्ड क्लेम और उनका मतलब

  • iss (issuer) — टोकन किसने बनाया, आमतौर पर ऑथ सर्वर का URL।
  • sub (subject) — टोकन किसके बारे में है, आमतौर पर यूज़र id।
  • aud (audience) — टोकन किस सर्विस के लिए है। वेरिफ़ायर को दूसरे audience के टोकन रिजेक्ट करने चाहिए।
  • exp (expiration) — Unix टाइमस्टैम्प जिसके बाद टोकन अमान्य है। छोटी लाइफ़टाइम (एक्सेस टोकन के लिए मिनट) लीक का नुक़सान सीमित करती है।
  • nbf (not before) और iat (issued at) — टाइमस्टैम्प जो बताते हैं टोकन कब वैध हुआ और कब बना।
  • jti (JWT id) — यूनिक id, replay पकड़ने या किसी खास टोकन को रद्द करने के लिए।
  • कस्टम क्लेम — रोल, परमिशन, tenant id, ईमेल। इन्हें छोटा रखें: टोकन हर रिक्वेस्ट के साथ जाता है।

आज़माएँ: JWT क्लेम एनालाइज़र आज़माएँ: JWT एक्सपायरेशन चेकर

डिकोड करना वेरिफ़ाई करना नहीं है

JWT डिकोड करने का मतलब है हेडर और पेलोड को Base64URL-डिकोड करके पढ़ना। यह कोई भी बिना किसी key के कर सकता है — इसीलिए डिकोड किए पेलोड पर अकेले कभी भरोसा नहीं करना चाहिए। वेरिफ़ाई करने का मतलब है सही key और एल्गोरिदम से सिग्नेचर दोबारा कैलकुलेट करके मिलान की पुष्टि करना, फिर exp, nbf, iss और aud जाँचना।

डिबगिंग के दौरान टोकन पढ़ने के लिए ऑनलाइन डिकोडर सही टूल है: देखना कि वह किस यूज़र का नाम लेता है, कौन-से रोल रखता है और कब एक्सपायर होता है। यह सिक्योरिटी चेक नहीं है, और ब्राउज़र में चलने वाला डिकोडर ही एकमात्र किस्म है जिसमें असली टोकन पेस्ट करना चाहिए।

आज़माएँ: JWT डिकोडर आज़माएँ: JWT हेडर एनालाइज़र

HS256 बनाम RS256 बनाम ES256

  • HS256 (SHA-256 के साथ HMAC) — एक शेयर्ड सीक्रेट साइन भी करता है और वेरिफ़ाई भी। सरल, तेज़, तब ठीक जब एक ही सर्विस टोकन जारी और इस्तेमाल करती है। जो पक्ष वेरिफ़ाई कर सकता है वह जाली टोकन भी बना सकता है।
  • RS256 (RSA सिग्नेचर) — प्राइवेट key साइन करती है, पब्लिक key वेरिफ़ाई करती है। कोई भी सर्विस प्रकाशित पब्लिक key (अक्सर JWKS एंडपॉइंट से) से वेरिफ़ाई कर सकती है, टोकन बनाए बिना। OAuth प्रोवाइडर का डिफ़ॉल्ट।
  • ES256 (P-256 के साथ ECDSA) — RS256 जैसा असममित मॉडल, कहीं छोटी key और सिग्नेचर के साथ।
  • none — ऐसा एल्गोरिदम जिसका मतलब है "कोई सिग्नेचर नहीं"। वेरिफ़ायर को इसे रिजेक्ट करना चाहिए; alg=none स्वीकार करना क्लासिक JWT कमज़ोरियों में से एक है।

आज़माएँ: JWT जनरेटर आज़माएँ: HMAC जनरेटर

JWT सिक्योरिटी नियम

  • सिग्नेचर वेरिफ़ाई करें और सर्वर पर एल्गोरिदम पिन करें। टोकन के अपने हेडर को कभी तय न करने दें कि कौन-सा एल्गोरिदम इस्तेमाल होगा।
  • हमेशा exp जाँचें, और aud व iss को अपनी वैल्यू से मिलाएँ।
  • पेलोड में कभी सीक्रेट, पासवर्ड या संवेदनशील निजी डेटा न रखें — टोकन रखने वाला कोई भी उसे पढ़ सकता है। एन्क्रिप्शन चाहिए तो JWE इस्तेमाल करें।
  • एक्सेस टोकन छोटी लाइफ़ के रखें और नए पाने के लिए रिफ़्रेश टोकन इस्तेमाल करें।
  • ब्राउज़र में टोकन सावधानी से स्टोर करें: HttpOnly, Secure, SameSite कुकी localStorage से सुरक्षित है, जिसे कोई भी इंजेक्ट की गई स्क्रिप्ट पढ़ सकती है।
  • HS256 के लिए मज़बूत सीक्रेट इस्तेमाल करें — कम से कम 256 बिट रैंडमनेस, कभी पासवर्ड नहीं।
  • रद्द करने की योजना बनाएँ: JWT एक्सपायर होने तक वैध रहता है, इसलिए लॉगआउट या समझौता हुए अकाउंट के लिए denylist (jti) या छोटी लाइफ़टाइम चाहिए।

आज़माएँ: रैंडम सीक्रेट जनरेटर आज़माएँ: OAuth टोकन डिकोडर

OAuth 2.0 और OpenID Connect में JWT

OAuth 2.0 एक्सेस टोकन अक्सर JWT होते हैं, हालाँकि स्पेक इसे ज़रूरी नहीं करता; OpenID Connect ID टोकन हमेशा JWT होते हैं। ID टोकन क्लाइंट एप्लिकेशन के लिए ऑथेंटिकेटेड यूज़र (sub, ईमेल, नाम) बताता है; एक्सेस टोकन क्लाइंट को API कॉल करने की परमिशन देता है (scope, aud)। दोनों एक ही तरह वेरिफ़ाई होते हैं, लेकिन ID टोकन को कभी एक्सेस टोकन की तरह API को नहीं भेजना चाहिए।

आज़माएँ: OAuth टोकन डिकोडर

अक्सर पूछे जाने वाले सवाल

क्या JWT एन्क्रिप्टेड होता है?

नहीं — स्टैंडर्ड साइन्ड JWT (JWS) सिर्फ़ Base64URL-एन्कोडेड होता है। इसका पेलोड टोकन रखने वाला कोई भी पढ़ सकता है। एन्क्रिप्टेड टोकन (JWE) मौजूद हैं लेकिन बहुत कम आम हैं।

क्या JWT को सीक्रेट के बिना डिकोड किया जा सकता है?

हाँ। हेडर और पेलोड सादा Base64URL हैं, इसलिए कोई भी डिकोडर उन्हें पढ़ सकता है। सीक्रेट या key सिर्फ़ सिग्नेचर वेरिफ़ाई करने के लिए चाहिए, जो टोकन के असली होने का सबूत है।

कैसे जाँचें कि JWT एक्सपायर हो गया है?

इसे डिकोड करें और exp क्लेम (सेकंड में Unix टाइमस्टैम्प) की तुलना मौजूदा समय से करें। वेरिफ़ायर लाइब्रेरी यह अपने आप करती है; ऑनलाइन डिकोडर एक्सपायरी को पढ़ने योग्य तारीख़ के रूप में दिखाता है।

JWT और सेशन कुकी में क्या फ़र्क़ है?

सेशन कुकी एक अपारदर्शी id है जिसे सर्वर अपने स्टोर में देखता है; JWT सेशन डेटा खुद साइन करके साथ रखता है, इसलिए सर्वर को लुकअप नहीं चाहिए। JWT सर्विसेज़ के बीच आसानी से स्केल होते हैं; सेशन रद्द करना आसान है।

वेब ऐप में JWT कहाँ स्टोर करें?

SameSite सेट के साथ HttpOnly, Secure कुकी बेहतर है, ताकि पेज पर JavaScript उसे न पढ़ सके। localStorage सुविधाजनक है लेकिन किसी भी cross-site scripting बग से टोकन एक्सपोज़ कर देता है।

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

सिर्फ़ तब जब डिकोडर पूरी तरह आपके ब्राउज़र में चले और टोकन कहीं न भेजे। Mutqan का JWT डिकोडर लोकली काम करता है; फिर भी प्रोडक्शन टोकन को सीक्रेट मानें और जहाँ हो सके टेस्ट टोकन इस्तेमाल करें।

इस गाइड में बताए गए टूल्स

JWT का हेडर और पेलोड डिकोड करें, क्लेम जाँचें और एक्सपायरी देखें — पूरी तरह आपके ब्राउज़र में।

सुरक्षा टूल खोलें

वेबहुक और API रिक्वेस्ट साइनिंग के लिए HMAC सिग्नेचर (SHA-256/384/512/SHA-1) बनाएँ।

सुरक्षा टूल खोलें

Base64 या Base64url स्ट्रिंग को टेक्स्ट में डिकोड करें, पैडिंग अपने आप ठीक होने के साथ।

एन्कोडिंग टूल खोलें

और गाइड

और गाइड →
JSON और डेटा

JSON क्या है?

JSON आसान भाषा में: यह क्या है, छह वैल्यू टाइप, वे सिंटैक्स नियम जिनमें लोग अटकते हैं, इसे फ़ॉर्मेट और वैलिडेट कैसे करें, और XML व YAML से इसकी तुलना।

5 मिनट पढ़ने का समय
API टेस्टिंग

API टेस्टिंग क्या है? REST API कैसे टेस्ट करें

API टेस्टिंग समझें: यह क्या है, हर रिक्वेस्ट और रिस्पॉन्स में क्या जाँचें, REST API टेस्ट करने का स्टेप-बाय-स्टेप तरीका, आम गलतियाँ और मुफ़्त टूल्स।

7 मिनट पढ़ने का समय
टेस्ट डिज़ाइन

टेस्ट केस कैसे लिखें

भरोसेमंद टेस्ट केस कैसे लिखें: हर केस के ज़रूरी फ़ील्ड, कॉपी-रेडी टेम्पलेट, लॉगिन का उदाहरण, और वे तकनीकें जो असली बग पकड़ती हैं।

5 मिनट पढ़ने का समय
एन्कोडिंग

Base64 क्या है? एन्कोडिंग समझें

Base64 समझें: यह क्या है और क्या नहीं, एन्कोडिंग कैसे काम करती है, आउटपुट एक-तिहाई क्यों बढ़ता है, Base64 बनाम Base64URL, = पैडिंग, और एन्कोड-डिकोड।

4 मिनट पढ़ने का समय
यूटिलिटीज़

UUID क्या है? v4 बनाम v7, UUID बनाम GUID और ULID

UUID समझें: 128-बिट फ़ॉर्मेट, v4 बनाम v7, डेटाबेस key के लिए v7 बेहतर क्यों, UUID बनाम GUID बनाम ULID, कॉलिज़न की संभावना, और जनरेट-वैलिडेट कैसे करें।

5 मिनट पढ़ने का समय
वेब

HTTP स्टेटस कोड समझें

HTTP स्टेटस कोड की हर क्लास उन कोड के साथ जो असल में मिलते हैं — 200, 301, 400, 401, 403, 404, 422, 429, 500, 502, 503, 504 — वजह और कौन-सा लौटाएँ।

5 मिनट पढ़ने का समय