Go (Golang) में JWT टोकन: golang-jwt लाइब्रेरी और उपयोग के उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) में JWT टोकन: golang-jwt लाइब्रेरी के साथ पूर्ण मार्गदर्शिका



JSON वेब टोकन (JWT) — JSON पर आधारित एक्सेस टोकन बनाने के लिए एक खुला मानक (RFC 7519) है। JWT का व्यापक रूप से पक्षों के बीच प्रमाणीकरण और सूचना के आदान-प्रदान के लिए उपयोग किया जाता है। Go (Golang) में JWT के साथ काम करने के लिए सबसे लोकप्रिय और सक्रिय रूप से समर्थित लाइब्रेरी golang-jwt/jwt/v5 है। इस लेख में, हम विस्तार से देखेंगे कि सुरक्षित वेब एप्लिकेशन बनाने के लिए इस लाइब्रेरी को कैसे स्थापित करें, कॉन्फ़िगर करें और उपयोग करें।



golang-jwt लाइब्रेरी स्थापित करना



आरंभ करने के लिए, go get का उपयोग करके अपने प्रोजेक्ट में लाइब्रेरी जोड़ें:



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


स्थापना के बाद, अपने कोड में पैकेज आयात करें:



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


JWT के मुख्य घटक



JWT तीन भागों से बना होता है, जो बिंदुओं द्वारा अलग किए जाते हैं: Header (शीर्षक), Payload (पेलोड) और Signature (हस्ताक्षर)। golang-jwt लाइब्रेरी उनमें से प्रत्येक के साथ काम करने के लिए सुविधाजनक संरचनाएं प्रदान करती है:



  • Header — इसमें टोकन प्रकार और हस्ताक्षर एल्गोरिदम (जैसे, HS256, RS256) के बारे में मेटाडेटा होता है।
  • Payload — इसमें claims (दावे) होते हैं, जैसे उपयोगकर्ता आईडी, समाप्ति समय, भूमिकाएं और अन्य डेटा।
  • Signature — गुप्त कुंजी या कुंजी जोड़ी (निजी/सार्वजनिक) का उपयोग करके बनाया जाता है।


एक्सेस टोकन (Access Token) बनाना



HS256 एल्गोरिदम (सममित एन्क्रिप्शन) के साथ एक्सेस टोकन बनाने का उदाहरण देखें। पहले कस्टम claims के साथ एक संरचना परिभाषित करें:



type CustomClaims struct {    UserID   int    `json:"user_id"`    Username string `json:"username"`    jwt.RegisteredClaims}


अब टोकन उत्पन्न करने के लिए एक फ़ंक्शन बनाएं:



func GenerateAccessToken(userID int, username string, secretKey []byte) (string, error) {    claims := CustomClaims{        UserID:   userID,        Username: username,        RegisteredClaims: jwt.RegisteredClaims{            ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)),            IssuedAt:  jwt.NewNumericDate(time.Now()),            Subject:   "access",        },    }

token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString(secretKey)}


यहां हम टोकन का जीवनकाल 15 मिनट निर्धारित करते हैं, जो एक्सेस टोकन के लिए मानक अभ्यास है। समय को सही ढंग से प्रारूपित करने के लिए jwt.NewNumericDate() का उपयोग करें।



टोकन का सत्यापन और पार्सिंग



टोकन की प्रामाणिकता की जांच करने के लिए, claims निकालना और हस्ताक्षर सत्यापित करना आवश्यक है:



func ValidateToken(tokenString string, secretKey []byte) (*CustomClaims, error) {    token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {        // जांचें कि अपेक्षित हस्ताक्षर एल्गोरिदम का उपयोग किया जा रहा है        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {            return nil, fmt.Errorf("अप्रत्याशित हस्ताक्षर विधि: %v", token.Header["alg"])        }        return secretKey, nil    })

if err != nil { return nil, err }

if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid { return claims, nil }

return nil, fmt.Errorf("अमान्य टोकन")}


एल्गोरिदम प्रतिस्थापन हमलों से बचने के लिए कॉलबैक फ़ंक्शन में हस्ताक्षर एल्गोरिदम की जांच करना महत्वपूर्ण है।



रिफ्रेश टोकन (Refresh Token) बनाना और अपडेट करना



सुरक्षा बढ़ाने के लिए, अक्सर टोकन की एक जोड़ी का उपयोग किया जाता है: अल्पकालिक एक्सेस टोकन और दीर्घकालिक रिफ्रेश टोकन। रिफ्रेश टोकन लॉगिन/पासवर्ड दोबारा दर्ज किए बिना एक नया एक्सेस टोकन प्राप्त करने की अनुमति देता है।



func GenerateRefreshToken(userID int, secretKey []byte) (string, error) {                    

अनुशंसाएँ