OAuth-Client für Go (Golang): Verbindung zu OAuth 2.0-Anbietern

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

OAuth-Client-Bibliothek für Go (Golang)



Die Bibliothek golang.org/x/oauth2 ist das offizielle Paket für die Arbeit mit dem OAuth 2.0-Protokoll in der Sprache Go. Sie bietet eine benutzerfreundliche Schnittstelle zur Authentifizierung von Benutzern über Drittanbieterdienste (Google, GitHub, Facebook, VK und andere) sowie zur Verwaltung von Zugriffs- und Aktualisierungstoken.



Dieses Tool ist der De-facto-Standard für die Implementierung von OAuth 2.0 in Go-Anwendungen. Es wird aktiv vom Go-Team unterstützt und in Tausenden von Projekten verwendet, darunter Kubernetes, Docker und viele andere.



Hauptfunktionen

  • Unterstützung aller OAuth 2.0-Grant-Typen — Authorization Code, Client Credentials, Resource Owner Password Credentials, Implicit.
  • Automatische Tokenverwaltung — Abrufen, Aktualisieren und Speichern von Access-/Refresh-Token.
  • Integrierte Unterstützung für gängige Anbieter — Google, GitHub, Facebook, Microsoft, Slack und andere.
  • Flexible Konfiguration des HTTP-Clients — automatisches Einfügen von Token in Anfrage-Header.
  • Sichere Token-Speicherung — Unterstützung für Verschlüsselung und benutzerdefinierte Speicher.
  • Integration mit net/http — einfache Middleware zur Verarbeitung von Anfragen.


Installation

Die Installation erfolgt auf dem Standardweg über go get:

go get golang.org/x/oauth2


Es wird auch empfohlen, das Paket für den jeweiligen Anbieter zu installieren, z. B. für Google:

go get golang.org/x/oauth2/google


Basisbeispiel zur Verwendung

Betrachten wir ein einfaches Beispiel für die Authentifizierung über 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-Konfiguration config := &oauth2.Config{ ClientID: "IHRE_CLIENT_ID", ClientSecret: "IHR_CLIENT_SECRET", RedirectURL: "http://localhost:8080/callback", Scopes: []string{"https://www.googleapis.com/auth/userinfo.email"}, Endpoint: google.Endpoint, }

// URL für die Autorisierung erstellen authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline) fmt.Println("Folgen Sie dem Link:", authURL)

// Callback-Verarbeitung 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, "Fehler beim Austausch des Codes", http.StatusInternalServerError) return } fmt.Fprintf(w, "Zugriffstoken: %s", token.AccessToken) })

http.ListenAndServe(":8080", nil)}


Arbeit mit Token

Die Bibliothek bietet praktische Methoden für die Arbeit mit Token:



// Token speicherntoken := &oauth2.Token{    AccessToken:  "access-token",    TokenType:    "Bearer",    RefreshToken: "refresh-token",    Expiry:       time.Now().Add(1 * time.Hour),}

// HTTP-Client mit automatischer Token-Einfügung erstellenclient := config.Client(context.Background(), token)

// Anfrage mit Autorisierung ausführenresp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo")if err != nil { // Fehlerbehandlung}defer resp.Body.Close()


Benutzerdefinierter Token-Speicher

Für Produktionsanwendungen wird empfohlen, einen eigenen Speicher zu implementieren:



type TokenStorage interface {    GetToken() (*oauth2.Token, error)    SetToken(*oauth2.Token) error}

// Beispiel mit Dateitype FileStorage struct { path string}

func (f *FileStorage) GetToken() (*oauth2.Token, error) { data, err := os.ReadFile(f.pat

Empfehlungen