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/oauth2Il est également recommandé d'installer le package pour un fournisseur spécifique, par exemple pour Google :
go get golang.org/x/oauth2/googleExemple 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 Aussi dans la bibliothèque
Cryptographie dans Node.js : chiffrement et hachage avec crypto
Test en Go (Golang) : frameworks et outils — guide complet
Cryptographie dans Node.js : chiffrement et hachage avec crypto