Go में OAuth 2.0 और JWT प्रमाणीकरण: शुरुआती के लिए पूर्ण गाइड

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

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

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

परिचय: Go में OAuth 2.0 और JWT की आवश्यकता क्यों है?

\n

आधुनिक वेब एप्लिकेशन और API शायद ही कभी प्रमाणीकरण प्रणाली के बिना काम करते हैं। यदि आप Go (Golang) में लिख रहे हैं और अपने एंडपॉइंट को सुरक्षित करना चाहते हैं, तो आपको दो प्रमुख तकनीकों को समझना होगा: OAuth 2.0 (एक्सेस डेलिगेशन प्रोटोकॉल) और JWT (JSON Web Token — एक कॉम्पैक्ट टोकन फॉर्मेट)।

\n

इस लेख में, हम सीखेंगे कि Go में शुरू से सुरक्षित प्रमाणीकरण कैसे लागू करें। आप जानेंगे:

\n
    \n
  • OAuth 2.0 और JWT में क्या अंतर है और वे एक साथ कैसे काम करते हैं।
  • \n
  • Go में JWT टोकन कैसे जनरेट और वेरिफाई करें।
  • मिनिमल OAuth 2.0 प्रमाणीकरण (Client Credentials flow) कैसे बनाएं।
  • Middleware का उपयोग करके REST API को कैसे सुरक्षित करें।
\n

यह लेख उन शुरुआती डेवलपर्स के लिए है जो Go और HTTP सर्वर की मूल बातों से परिचित हैं।

\n\n

मूल बातें: OAuth 2.0 और JWT — एक ही चीज़ नहीं हैं

\n

कई नौसिखिए इन अवधारणाओं को भ्रमित करते हैं। आइए स्पष्ट करते हैं।

\n\n

OAuth 2.0 क्या है?

\n

OAuth 2.0 एक प्रमाणीकरण प्रोटोकॉल है जो एक सेवा (क्लाइंट) को उपयोगकर्ता की ओर से दूसरी सेवा (सर्वर) के संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। कल्पना करें कि आप Google के माध्यम से किसी वेबसाइट पर लॉग इन करना चाहते हैं। साइट को आपका पासवर्ड नहीं मिलता — उसे Google से एक अस्थायी टोकन मिलता है जो केवल आपके ईमेल तक पहुंच प्रदान करता है (और वह भी आपकी सहमति से)।

\n

OAuth 2.0 में मुख्य भूमिकाएँ:

\n
    \n
  • Resource Owner — डेटा का मालिक (आमतौर पर उपयोगकर्ता)।
  • \n
  • Client — वह एप्लिकेशन जो पहुंच प्राप्त करना चाहता है।
  • \n
  • Authorization Server — वह सर्वर जो सत्यापन के बाद टोकन जारी करता है।
  • \n
  • Resource Server — वह सर्वर जो संरक्षित डेटा संग्रहीत करता है और टोकन सत्यापित करता है।
  • \n
\n\n

JWT क्या है?

\n

JWT (JSON Web Token) टोकन का एक प्रारूप है। यह तीन भागों की एक स्ट्रिंग है जो डॉट्स द्वारा अलग की जाती है: header.payload.signature। JWT में कोई भी डेटा हो सकता है (जैसे, उपयोगकर्ता ID, भूमिका, समाप्ति तिथि) और इसे गुप्त कुंजी से हस्ताक्षरित किया जाता है ताकि इसे नकली न बनाया जा सके।

\n

OAuth 2.0 JWT से बंधा नहीं है — टोकन कोई भी स्ट्रिंग हो सकता है। हालांकि, व्यवहार में JWT का सबसे अधिक उपयोग किया जाता है क्योंकि यह स्व-निहित है: सर्वर को डेटाबेस में सत्र संग्रहीत करने की आवश्यकता नहीं है, सभी जानकारी को तुरंत सत्यापित किया जा सकता है।

\n\n

Go में JWT का कार्यान्वयन: टोकन जनरेशन और सत्यापन

\n

अभ्यास से शुरू करते हैं। Go में JWT के साथ काम करने के लिए हम golang-jwt/jwt/v5 लाइब्रेरी का उपयोग करेंगे। इसे इंस्टॉल करें:

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

Access Token जनरेट करना

\n

एक फंक्शन बनाते हैं जो उपयोगकर्ता ID लेता है और 1 घंटे की वैधता के साथ एक हस्ताक्षरित JWT टोकन लौटाता है।

\n
package main\n\nimport (\n    "time"\n    "github.com/golang-jwt/jwt/v5"\n)\n\nvar jwtSecret = []byte("your-secret-key") // प्रोडक्शन में .env में स्टोर करें!\n\ntype Claims struct {\n    UserID uint `json:"user_id"`\n    jwt.RegisteredClaims\n}\n\nfunc GenerateAccessToken(userID uint) (string, error) {\n    claims := Claims{\n        UserID: userID,\n        RegisteredClaims: jwt.RegisteredClaims{\n            ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)),\n            IssuedAt:  jwt.NewNumericDate(time.Now()),\n            Issuer:    "my-app",\n        },\n    }\n    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)\n    return token.SignedString(jwtSecret)\n}
\n\n

JWT को सत्यापित और पार्स करना

\n

अब एक middleware लिखते हैं जो Authorization: Bearer <token> हेडर से टोकन की जांच करेगा।

\n
func ValidateToken(tokenString string) (*Claims, error) {\n    token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {\n        // जांचें कि सही हस्ताक्षर विधि का उपयोग किया गया है या नहीं\n                

ब्लॉग

पुस्तक अनुशंसाएँ