Client OAuth pour Go (Golang) : Connexion aux fournisseurs OAuth 2.0

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèque client OAuth pour Go (Golang)



La bibliothèque golang.org/x/oauth2 est le package officiel pour travailler avec le protocole OAuth 2.0 en langage Go. Elle fournit une interface pratique pour l'authentification des utilisateurs via des services tiers (Google, GitHub, Facebook, VK et autres), ainsi que pour la gestion des jetons d'accès et de rafraîchissement.



Cet outil est la norme de facto pour l'implémentation d'OAuth 2.0 dans les applications Go. Il est activement maintenu par l'équipe Go et utilisé dans des milliers de projets, y compris Kubernetes, Docker et bien d'autres.



Fonctionnalités principales

  • Prise en charge de tous les flux OAuth 2.0 — Authorization Code, Client Credentials, Resource Owner Password Credentials, Implicit.
  • Gestion automatique des jetons — obtention, mise à jour et stockage des jetons d'accès/rafraîchissement.
  • Prise en charge intégrée des fournisseurs populaires — Google, GitHub, Facebook, Microsoft, Slack et autres.
  • Configuration flexible du client HTTP — insertion automatique des jetons dans les en-têtes des requêtes.
  • Stockage sécurisé des jetons — prise en charge du chiffrement et des stockages personnalisés.
  • Intégration avec net/http — middleware simple pour le traitement des requêtes.


Installation

L'installation se fait de manière standard via go get :

go get golang.org/x/oauth2


Il est également recommandé d'installer le package pour un fournisseur spécifique, par exemple pour Google :

go get golang.org/x/oauth2/google


Exemple d'utilisation de base

Considérons un exemple simple d'authentification via Google OAuth 2.0 :



package main

import ( "context" "fmt" "net/http" "golang.org/x/oauth2" "golang.org/x/oauth2/google")

func main() { // Configuration OAuth 2.0 config := &oauth2.Config{ ClientID: "VOTRE_CLIENT_ID", ClientSecret: "VOTRE_CLIENT_SECRET", RedirectURL: "http://localhost:8080/callback", Scopes: []string{"https://www.googleapis.com/auth/userinfo.email"}, Endpoint: google.Endpoint, }

// Création de l'URL d'autorisation authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline) fmt.Println("Suivez le lien :", authURL)

// Gestion du callback 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, "Erreur d'échange du code", http.StatusInternalServerError) return } fmt.Fprintf(w, "Jeton d'accès : %s", token.AccessToken) })

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


Gestion des jetons

La bibliothèque fournit des méthodes pratiques pour gérer les jetons :



// Sauvegarde du jetontoken := &oauth2.Token{    AccessToken:  "jeton-acces",    TokenType:    "Bearer",    RefreshToken: "jeton-rafraichissement",    Expiry:       time.Now().Add(1 * time.Hour),}

// Création d'un client HTTP avec insertion automatique du jetonclient := config.Client(context.Background(), token)

// Exécution d'une requête avec autorisationresp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo")if err != nil { // gestion de l'erreur}defer resp.Body.Close()


Stockage personnalisé des jetons

Pour les applications de production, il est recommandé d'implémenter votre propre stockage :



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

// Exemple avec utilisation d'un fichiertype FileStorage struct { path string}

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

Recommendations