सुरक्षा और प्रमाणपत्र
JWT संरचना: हेडर, पेलोड और सिग्नेचर
हस्ताक्षरित JWT आम तौर पर कॉम्पैक्ट JWS रूप उपयोग करता है: बिंदुओं से अलग किए गए तीन Base64URL-एन्कोड सेगमेंट। हर सेगमेंट का अलग काम है।
प्रकाशित
कॉम्पैक्ट हस्ताक्षरित JWT में बिंदु से अलग तीन सेगमेंट होते हैं
आम हस्ताक्षरित रूप JWS Compact Serialization है। इसमें सुरक्षित हेडर, पेलोड और सिग्नेचर होते हैं। एन्क्रिप्ट किया JWE कॉम्पैक्ट टोकन पाँच सेगमेंट रखता है, इसलिए सेगमेंट गिनना संदर्भ देता है, टोकन की वैधता का प्रमाण नहीं।
base64url(header).base64url(payload).base64url(signature)हेडर: एल्गोरिदम और टोकन मेटाडेटा
JOSE हेडर एक JSON ऑब्जेक्ट है। alg घोषित साइनिंग या MAC एल्गोरिदम बताता है और typ आम तौर पर JWT होता है। सत्यापक को हेडर पर भरोसा करके कोई भी एल्गोरिदम चुनने के बजाय अपनी एल्गोरिदम नीति लागू करनी चाहिए।
{
"alg": "HS256",
"typ": "JWT"
}पेलोड: पंजीकृत और ऐप के दावे
पेलोड में sub, iss, aud, exp और ऐप-विशिष्ट मान जैसे दावे होते हैं। हस्ताक्षरित JWT में पेलोड एन्कोड होता है, एन्क्रिप्ट नहीं, इसलिए टोकन पाने वाला व्यक्ति सामान्यतः इसे पढ़ सकता है।
{
"sub": "1234567890",
"name": "Ada Lovelace",
"admin": true
}सिग्नेचर: एन्कोड किए हेडर और पेलोड की अखंडता
कॉम्पैक्ट JWS में साइनिंग इनपुट ठीक Base64URL हेडर, एक बिंदु और ठीक Base64URL पेलोड है। बना सिग्नेचर या MAC तीसरे सेगमेंट में एन्कोड होता है। सुरक्षित बाइट में कोई बदलाव सत्यापन विफल करना चाहिए।
sign(
base64url(header) + "." + base64url(payload),
trustedKey
)Base64URL सेगमेंट को URL-सुरक्षित बनाता है, एन्क्रिप्ट नहीं
JWT कॉम्पैक्ट सीरियलाइज़ेशन URL-सुरक्षित Base64 वर्णमाला उपयोग करता है और आम तौर पर आखिरी padding छोड़ देता है। सेगमेंट को वापस JSON में बदलना सामग्री दिखाता है, लेकिन प्रामाणिकता, अनुमति या गोपनीयता की गारंटी नहीं देता।
तीन सेगमेंट आम तौर पर JWS और पाँच JWE बताते हैं
| कॉम्पैक्ट रूप | सेगमेंट | मुख्य गुण |
|---|---|---|
| JWS | 3 | सिग्नेचर या MAC से अखंडता |
| JWE | 5 | एन्क्रिप्शन से गोपनीयता |
सुरक्षित निरीक्षण प्रक्रिया
- केवल वही टोकन डिकोड करें जिन्हें देखने की अनुमति है।
- सत्यापन सफल होने तक डिकोड किए दावों को अविश्वसनीय मानें।
- प्रोडक्शन bearer टोकन कभी तीसरे पक्ष की सेवा में न चिपकाएँ।
- सिग्नेचर के बाद issuer, audience और समय के दावे सत्यापित करें।
उदाहरण आज़माएँ
JWT के तीन सेगमेंट देखें
कृत्रिम टोकन लोड करके हेडर, पेलोड और असत्यापित सिग्नेचर स्थिति अलग-अलग देखें।
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSIsImFkbWluIjp0cnVlLCJpYXQiOjE3MDAwMDAwMDAsIm5iZiI6MTY5OTk5OTkwMCwiZXhwIjoyMTQ3NDgzNjQ3fQ.ZGVtby1zaWduYXR1cmUअपेक्षित परिणाम: डिकोडर तीन सेगमेंट और पढ़े जा सकने वाले दावे दिखाता है, लेकिन सिग्नेचर को सत्यापित नहीं बताता।
तीन सेगमेंट देखें
कृत्रिम JWT स्थानीय रूप से डिकोड करें
कॉम्पैक्ट टोकन चिपकाकर ब्राउज़र में उसका हेडर, पेलोड, कच्चे सेगमेंट और सिग्नेचर स्थिति देखें।