Go (Golang) के लिए OAuth क्लाइंट लाइब्रेरी
लाइब्रेरी golang.org/x/oauth2 Go भाषा में OAuth 2.0 प्रोटोकॉल के साथ काम करने के लिए आधिकारिक पैकेज है। यह तृतीय-पक्ष सेवाओं (Google, GitHub, Facebook, VK और अन्य) के माध्यम से उपयोगकर्ताओं को प्रमाणित करने के साथ-साथ एक्सेस और रिफ्रेश टोकन प्रबंधित करने के लिए एक सुविधाजनक इंटरफ़ेस प्रदान करता है।
यह टूल Go अनुप्रयोगों में OAuth 2.0 को लागू करने के लिए वास्तविक मानक है। इसे Go टीम द्वारा सक्रिय रूप से समर्थित किया जाता है और Kubernetes, Docker और कई अन्य सहित हजारों परियोजनाओं में उपयोग किया जाता है।
मुख्य विशेषताएं
- सभी OAuth 2.0 ग्रांट का समर्थन — Authorization Code, Client Credentials, Resource Owner Password Credentials, Implicit.
- स्वचालित टोकन प्रबंधन — एक्सेस/रिफ्रेश टोकन प्राप्त करना, अपडेट करना और संग्रहीत करना।
- लोकप्रिय प्रदाताओं के लिए अंतर्निहित समर्थन — Google, GitHub, Facebook, Microsoft, Slack और अन्य।
- HTTP-क्लाइंट का लचीला कॉन्फ़िगरेशन — अनुरोध हेडर में टोकन का स्वचालित सम्मिलन।
- टोकन का सुरक्षित भंडारण — एन्क्रिप्शन और कस्टम स्टोरेज के लिए समर्थन।
- net/http के साथ एकीकरण — अनुरोधों को संसाधित करने के लिए सरल middleware।
स्थापना
स्थापना go get के माध्यम से मानक तरीके से की जाती है:
go get golang.org/x/oauth2किसी विशिष्ट प्रदाता के लिए पैकेज स्थापित करने की भी सिफारिश की जाती है, उदाहरण के लिए Google के लिए:
go get golang.org/x/oauth2/googleउपयोग का मूल उदाहरण
Google OAuth 2.0 के माध्यम से प्रमाणीकरण का एक सरल उदाहरण देखें:
package main
import ( "context" "fmt" "net/http" "golang.org/x/oauth2" "golang.org/x/oauth2/google")
func main() { // OAuth 2.0 कॉन्फ़िगरेशन config := &oauth2.Config{ ClientID: "आपका_CLIENT_ID", ClientSecret: "आपका_CLIENT_SECRET", RedirectURL: "http://localhost:8080/callback", Scopes: []string{"https://www.googleapis.com/auth/userinfo.email"}, Endpoint: google.Endpoint, }
// प्राधिकरण के लिए URL बनाएं authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline) fmt.Println("लिंक पर जाएं:", authURL)
// कॉलबैक प्रोसेसिंग http.HandleFunc("/callback", func(w http.ResponseWriter, r *http.Request) { code := r.URL.Query().Get("code") token, err := config.Exchange(context.Background(), code) if err != nil { http.Error(w, "कोड विनिमय में त्रुटि", http.StatusInternalServerError) return } fmt.Fprintf(w, "एक्सेस टोकन: %s", token.AccessToken) })
http.ListenAndServe(":8080", nil)}टोकन के साथ काम करना
लाइब्रेरी टोकन के साथ काम करने के लिए सुविधाजनक तरीके प्रदान करती है:
// टोकन सहेजनाtoken := &oauth2.Token{ AccessToken: "access-token", TokenType: "Bearer", RefreshToken: "refresh-token", Expiry: time.Now().Add(1 * time.Hour),}
// स्वचालित टोकन सम्मिलन के साथ HTTP-क्लाइंट बनानाclient := config.Client(context.Background(), token)
// प्राधिकरण के साथ अनुरोध निष्पादित करनाresp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo")if err != nil { // त्रुटि प्रबंधन}defer resp.Body.Close()कस्टम टोकन भंडारण
उत्पादन अनुप्रयोगों के लिए, अपना स्वयं का भंडारण लागू करने की अनुशंसा की जाती है:
type TokenStorage interface { GetToken() (*oauth2.Token, error) SetToken(*oauth2.Token) error}
// फ़ाइल का उपयोग करने का उदाहरणtype FileStorage struct { path string}
func (f *FileStorage) GetToken() (*oauth2.Token, error) { data, err := os.ReadFile(f.pat