Go (Golang) में JWT टोकन: बनाना और जांचना - पूरी गाइड

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

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

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

Go (Golang) में JWT टोकन: पूरी गाइड

JSON Web Tokens (JWT) एक ओपन स्टैंडर्ड (RFC 7519) है जो JSON आधारित एक्सेस टोकन बनाने के लिए उपयोग होता है। JWT का इस्तेमाल क्लाइंट और सर्वर के बीच ऑथेंटिकेशन और जानकारी के आदान-प्रदान के लिए व्यापक रूप से किया जाता है। Go (Golang) भाषा में golang-jwt/jwt लाइब्रेरी की मदद से JWT टोकन के साथ काम करना आसान और प्रभावी है।

इस लेख में हम Go में JWT टोकन बनाने, साइन करने, जांचने और उपयोग करने की पूरी प्रक्रिया को विस्तार से समझेंगे। यह सामग्री शुरुआती और अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगी जो अपने Golang प्रोजेक्ट्स में सुरक्षित ऑथेंटिकेशन लागू करना चाहते हैं।

golang-jwt लाइब्रेरी इंस्टॉल करना

Go में JWT के साथ काम करने के लिए github.com/golang-jwt/jwt/v5 पैकेज का उपयोग किया जाता है। इसे इस कमांड से इंस्टॉल करें:

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

इंस्टॉल करने के बाद इसे अपने कोड में इम्पोर्ट करें:

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

JWT टोकन की संरचना

JWT टोकन तीन भागों से बना होता है, जो डॉट (.) से अलग होते हैं:

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

Go में JWT टोकन बनाना

आइए HMAC-SHA256 (HS256) एल्गोरिदम के साथ JWT टोकन बनाने का उदाहरण देखें। इसके लिए एक सीक्रेट की की आवश्यकता होगी।

package main

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

func main() {
    // सीक्रेट की (सुरक्षित स्थान पर रखें)
    secretKey := []byte("my_secret_key_12345")

    // claims (दावे) बनाएँ
    claims := jwt.MapClaims{
        "user_id": 123,
        "role":    "admin",
        "exp":     time.Now().Add(time.Hour * 24).Unix(), // टोकन 24 घंटे के लिए वैध
        "iat":     time.Now().Unix(),
    }

    // टोकन बनाएँ
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

    // टोकन को सीक्रेट की से साइन करें
    tokenString, err := token.SignedString(secretKey)
    if err != nil {
        fmt.Println("टोकन बनाने में त्रुटि:", err)
        return
    }

    fmt.Println("बनाया गया JWT टोकन:")
    fmt.Println(tokenString)
}

JWT टोकन की जाँच और पार्सिंग

टोकन की प्रामाणिकता जाँचने के लिए उसी सीक्रेट की का उपयोग करें। एक्सपायरी और सिग्नेचर की जाँच करना महत्वपूर्ण है।

package main

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

func main() {
    tokenString := "आपका_टोकन_यहाँ"
    secretKey := []byte("my_secret_key_12345")

    // टोकन को पार्स और जाँचें
    token, err := jwt.Parse(tokenString, 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 {
        fmt.Println("टोकन जाँच में त्रुटि:", err)
        return
    }

    // claims निकालें
    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        fmt.Println("टोकन वैध है!")
        fmt.Printf("User ID: %v\n", claims["user_id"])
        fmt.Printf("Role: %v\n", claims["role"])
    } else {
        fmt.Println("टोकन अमान्य है")
    }
}

स्ट्रक्चर्ड claims का उपयोग

सुविधा के लिए आप अपनी खुद की claims स्ट्रक्चर बना सकते हैं जो jwt.Claims इंटरफ़ेस को लागू करे:

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

func createCustomToken() (string, error) {
    claims := CustomClaims{
        UserID: 456,
        Role:                    

अनुशंसाएँ