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: पुस्तकालय में भी
Java में JWT टोकन: JSON Web Tokens के साथ काम करने की पूरी गाइड
Node.js के लिए WebSocket लाइब्रेरीज़: ws, Socket.IO और uWebSockets.js
Clikt: Kotlin के लिए शक्तिशाली CLI फ्रेमवर्क जिसमें घोषणात्मक सिंटैक्स है
PM2 — जावास्क्रिप्ट (Node.js) अनुप्रयोगों की निगरानी
Swift में डेटाबेस माइग्रेशन: iOS/macOS के लिए टूल्स और तरीके