JWT (JSON Web Token) का परिचय

JWT (JSON Web Token) एक संक्षेपित, स्व-सम्पूर्ण विधि है जो वेब पर प्रमाणीकरण के लिए उपयोग होती है। इसमें तीन हिस्से होते हैं: हेडर, पेलोड, और सिग्नेचर। हेडर में टोकन के प्रकार और एन्क्रिप्शन एल्गोरिदम की जानकारी होती है, पेलोड डेटा को संचालित करने के लिए होता है (सामान्यत: कुछ अनुमति जानकारी और उपयोगकर्ता पहचान सम्मिलित होती है), और सिग्नेचर टोकन की पुष्टता और मान्यता की पुष्टि के लिए होता है।

JWT डेटा प्रारूप

JWT एक संक्षेपित, URL-सुरक्षित तरीका है जो पार्टियों के बीच विनिमय के लिए जानकारी को प्रतिनिधित्व करता है। एक JWT वास्तव में तीन हिस्सों से मिलकर बनता है, जिन्हें डॉट (.) द्वारा अलग किया जाता है, अर्थात् हेडर.पेलोड.सिग्नेचर। आगे, हम इन तीन हिस्सों के डेटा प्रारूपों की जानकारी देंगे।

1. हेडर

हेडर सामान्यत: दो हिस्सों से मिलकर बनता है: टोकन प्रकार—सामान्यत: JWT, और हस्ताक्षर या एन्क्रिप्शन एल्गोरिदम, जैसे HMAC SHA256 या RSA। हेडर को JSON में प्रतिनिधित किया जाता है और फिर Base64Url का उपयोग करके एक स्ट्रिंग में एन्कोड किया जाता है। उदाहरण के लिए:

{
  "alg": "HS256",
  "typ": "JWT"
}

एन्कोडिंग के बाद, आपको इस तरह की स्ट्रिंग मिल सकती है, जैसे:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

2. पेलोड

पेलोड में एक सिरीज ऑफ क्लेम्स होती है, जो एंटिटी के बारे में जानकारी (सामान्यत: एक उपयोगकर्ता) और अन्य डेटा को संचालित करती है। पेलोड में कई पूर्वनिर्धारित क्लेम्स (जिन्हें रजिस्टर्ड क्लेम्स के रूप में भी जानते हैं) और कस्टम क्लेम्स (निजी क्लेम्स) शामिल हो सकती हैं।

पूर्वनिर्धारित क्लेम्स में शामिल हो सकती हैं:

  • iss (Issuer): जारीकर्ता
  • exp (Expiration Time): समाप्ति समय
  • sub (Subject): विषय
  • aud (Audience): दर्शक
  • iat (Issued At): जारी किया गया समय
  • nbf (Not Before): प्रभावी समय
  • jti (JWT ID): JWT की अद्वितीय पहचान

एक उदाहरण पेलोड इस तरह से दिख सकता है (JSON प्रारूप में):

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022
}

इस जानकारी को भी Base64Url के साथ एन्कोड किया जाएगा, और आपको इस तरह की स्ट्रिंग मिल सकती है, जैसे:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0

3. सिग्नेचर

सिग्नेचर भाग का उपयोग ऊपर में उल्लिखित दो एन्कोडित स्ट्रिंग को साइन करने के लिए किया जाता है, ताकि सत्यापित किया जा सके कि संदेश को संवर्धित नहीं किया गया है। पहले, आपको एक कुंजी की निर्दिष्ट करनी होगी (यदि HMAC SHA256 एल्गोरिदम का उपयोग किया जाता है), और फिर हेडर में निर्दिष्ट एल्गोरिदम का उपयोग करके हेडर और पेलोड को साइन करने की जरूरत होती है।

उदाहरण के लिए, यदि आपके पास निम्नलिखित हेडर और पेलोड हैं:

HeaderEncoded.HeaderPayload

इन्हें एक कुंजी का उपयोग करके साइन करने का पसुदोकोड हो सकता है:

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), सीक्रेट कुंजी)

परिणामस्वरूप साइन की गई स्ट्रिंग इस तरह की हो सकती है:

dBjftJeZ4CVPmTaoyL4IiArYfL4kH0jOspm6XwbcJXY

पूर्ण JWT

इन तीन हिस्सों को डॉट (.) के साथ जोड़कर पूर्ण JWT बनता है:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.dBjftJeZ4CVPmTaoyL4IiArYfL4kH0jOspm6XwbcJXY

JWT मानक बहुत ही लचीला है और पेलोड में आपको चाहिए उसी जानकारी को संचित करने का आपका उद्देश्य है जो आपकी जरूरत है (लेकिन JWT का आकार कम करने के उद्देश्य से और सुरक्षा कारणों के लिए, संवेदनशील जानकारी को नहीं संचित करना चाहिए), और इस जानकारी की पुष्टता को सिग्नेचर के माध्यम से सुनिश्चित करता है।

गो JWT लाइब्रेरी को इंस्टॉल करना

गो समुदाय JWT को निपटान के लिए github.com/golang-jwt/jwt नामक पैकेज प्रदान करता है। इस लाइब्रेरी को इंस्टॉल करना बहुत सरल है, बस अपने प्रोजेक्ट निर्देशिका में निम्नलिखित कमांड चलाएं:

go get -u github.com/golang-jwt/jwt/v5

इंस्टॉल होने के बाद, आप इसे निम्नलिखित रूप में शामिल कर सकते हैं:

import "github.com/golang-jwt/jwt/v5"

एक सरल टोकन बनाना

गो भाषा और HS256 एल्गोरिदम का उपयोग करके एक सरल JWT टोकन बनाने के लिए, आपको निम्नलिखित चरणों का पालन करना होगा:

पहले, HS256 एल्गोरिदम का उपयोग करते हुए एक नया टोकन ऑब्ज