golang-jwt Go : guide complet avec exemples | PythonLib

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

golang-jwt pour Go : guide complet avec exemples

La bibliothèque golang-jwt (nom officiel : github.com/golang-jwt/jwt/v5) est l'implémentation de facto des JSON Web Tokens (JWT) pour le langage Go. Elle offre aux développeurs un ensemble d'outils puissants et flexibles pour créer, signer, vérifier et décoder des tokens JWT. Un JWT est un moyen compact et autonome de transmettre des informations entre deux parties sous forme d'objet JSON, dont l'authenticité peut être vérifiée grâce à une signature numérique. Les tokens JWT sont largement utilisés pour l'authentification, l'autorisation et l'échange sécurisé de données dans les API REST, les architectures de microservices et les applications web.

Pourquoi utiliser cette bibliothèque ? Dans le développement web moderne avec Go, presque toute application nécessitant une authentification utilisateur (serveurs API, microservices, systèmes d'authentification unique) doit gérer les JWT. La bibliothèque golang-jwt prend en charge toute la complexité : génération et vérification des signatures (HMAC, RSA, ECDSA, EdDSA), analyse des en-têtes et de la charge utile, gestion des champs standards (exp, iat, iss, sub) et des claims personnalisés. Sans elle, il faudrait implémenter manuellement les opérations cryptographiques et l'analyse JSON, ce qui est source d'erreurs et de vulnérabilités.

Principaux avantages de golang-jwt : prise en charge complète de la spécification RFC 7519, simplicité d'utilisation grâce à une interface fluide, hautes performances (utilise la bibliothèque standard crypto), et extensibilité via des méthodes de signature et validateurs personnalisés. La bibliothèque est activement maintenue par la communauté, compte plus de 7 000 étoiles sur GitHub et est utilisée dans des projets comme Kubernetes, Docker, Grafana et bien d'autres.

Installation

L'installation de la bibliothèque se fait de manière standard pour Go via go get. Assurez-vous d'avoir Go version 1.18 ou supérieure (1.21+ recommandé).

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

Après exécution de la commande, la dépendance apparaîtra dans votre fichier go.mod. Importez la bibliothèque dans votre code comme suit :

import "github.com/golang-jwt/jwt/v5"

Démarrage rapide — exemple minimal fonctionnel

Créons un exemple simple : génération et vérification d'un token JWT avec une clé symétrique (HMAC-SHA256).

package main

import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v5"
)

func main() {
    // 1. Clé secrète (doit être stockée en sécurité)
    secretKey := []byte("ma-super-cle-secrete-12345")

    // 2. Création du token
    claims := jwt.MapClaims{
        "user_id": 12345,
        "role":    "admin",
        "exp":     time.Now().Add(time.Hour * 24).Unix(), // expiration dans 24h
        "iat":     time.Now().Unix(),                     // date de création
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    tokenString, err := token.SignedString(secretKey)
    if err != nil {
        panic(err)
    }
    fmt.Println("Token généré :", tokenString)

    // 3. Vérification et analyse du token
    parsedToken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        // Vérifie que la méthode de signature est HMAC
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, fmt.Errorf("méthode de signature inattendue : %v", token.Header["alg"])
        }
        return secretKey, nil
    })

    if err != nil {
        panic(err)
    }

    // 4. Extraction des claims
    if claims, ok := parsedToken.Claims.(jwt.MapClaims); ok && parsedToken.Valid {
        fmt.Printf("ID utilisateur : %v\n", claims["user_id"])
        fmt.Printf("Rôle : %v\n", claims["role"])
    } else {
        fmt.Println("Token invalide")
    }
}

Méthodes et fonctions principales

Examinons les méthodes clés de la bibliothèque. Pour chacune, nous donnons la signature, la description et un exemple fonctionnel.

Recommendations