recherche
Maisondéveloppement back-endGolangJetons JWT dans Golang : guide du développeur pour les API sécurisées

JWT Tokens in Golang: A Developer’s Guide to Secure APIs

Présentation

Dans le développement Web moderne, une authentification sécurisée et évolutive est cruciale. Les jetons Web JSON (JWT) sont devenus le moyen standard d'atteindre cet objectif. Dans cet article de blog, nous explorerons ce qu'est JWT, comment il fonctionne et comment l'implémenter dans Golang.

Qu'est-ce que JWT ?

JSON Web Token (JWT) est un moyen compact et sécurisé pour les URL de représenter les revendications afin de transmettre en toute sécurité les revendications entre deux parties. Il est couramment utilisé pour authentifier et autoriser les utilisateurs dans les API et les systèmes distribués.

Structure de JWT

Un JWT se compose de trois parties séparées par des points (.) :

<code>Header.Payload.Signature</code>

Exemple :

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.reGQzG3OKdoIMWLDKOZ4TICJit3EW69cQE72E2CfzRE</code>

Chaque partie est :

  1. En-tête : Spécifie le type de jeton (JWT) et l'algorithme de signature (HS256).
<code>{
  "alg": "HS256",
  "typ": "JWT"
}</code>
  1. Charge utile : Contient des revendications (données utilisateur telles que l'identifiant, le rôle ou le nom).
<code>{
    "sub": "1234567890",
    "name": "John Doe",
    "admin": true,
    "iat": 1516239022
}</code>
  1. Signature : Utilise un processus de signature cryptographique pour garantir l'intégrité du jeton. Explorons cela en détail.

Comment créer une signature :

  • Connectez l'en-tête et la charge utile codés :
<code>  base64UrlEncode(header) + "." + base64UrlEncode(payload)</code>
  • Signez le résultat :
    • Utilisez un algorithme de signature cryptographique (par exemple, HMACSHA256, RS256) à l'aide d'une clé secrète ou d'une clé privée.
  • Signature supplémentaire : Le JWT final devient
<code>  header.payload.signature</code>

Comment fonctionne JWT

  1. Le client envoie les informations de connexion au serveur.
  2. S'il est valide, le serveur générera le JWT et le renverra au client.
  3. Le client stocke JWT (par exemple dans localStorage ou cookie).
  4. Pour chaque demande, le client inclut le JWT dans l'en-tête Autorisation : Autorisation : Porteur
  5. Le serveur valide le JWT à chaque requête.
    • Recalculez la signature en utilisant l'en-tête et la charge utile reçus.
    • Comparez la signature recalculée avec la signature reçue.

Implémentation de JWT dans Golang

Les développeurs Golang peuvent tirer parti de l'excellente bibliothèque golang-jwt/jwt pour gérer JWT. Cette bibliothèque fournit des fonctionnalités puissantes pour créer, signer et valider des JWT. Vous pouvez le trouver ici.

Cependant, la gestion des JWT nécessite souvent des tâches répétitives telles que la configuration des méthodes de signature, l'analyse des jetons et la validation des revendications. Pour simplifier cela, j'ai écrit un package personnalisé pour envelopper les fonctionnalités de golang-jwt. Vous pouvez consulter mon colis ici. Voici un exemple d'utilisation de mon package JWT personnalisé.

package main

import (
    "context"
    "fmt"
    "log"
    "time"

    "github.com/golang-jwt/jwt/v5"
    jwtutil "github.com/kittipat1413/go-common/util/jwt"
)

type MyCustomClaims struct {
    jwt.RegisteredClaims
    UserID string `json:"uid"`
}

func main() {
    ctx := context.Background()
    signingKey := []byte("super-secret-key")
    manager, err := jwtutil.NewJWTManager(jwtutil.HS256, signingKey)
    if err != nil {
        log.Fatalf("Failed to create JWTManager: %v", err)
    }

    // Prepare custom claims
    claims := &MyCustomClaims{
        RegisteredClaims: jwt.RegisteredClaims{
            ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)),
            Issuer:    "example-HS256",
            Subject:   "example-subject",
        },
        UserID: "abc123",
    }

    // Create the token
    tokenStringHS256, err := manager.CreateToken(ctx, claims)
    if err != nil {
        log.Fatalf("Failed to create token: %v", err)
    }
    fmt.Println("Generated Token:", tokenStringHS256)

    // Validate the token
    parsedClaims := &MyCustomClaims{}
    err = manager.ParseAndValidateToken(ctx, tokenStringHS256, parsedClaims)
    if err != nil {
        log.Fatalf("Failed to validate token: %v", err)
    }

    fmt.Printf("Token is valid! UserID: %s, Issuer: %s\n", parsedClaims.UserID, parsedClaims.Issuer)
}
Vous pouvez parcourir l'implémentation complète et la documentation de mon package sur GitHub : ici.

Bonnes pratiques JWT

  1. Utilisez HTTPS : Transférez toujours les jetons via un canal sécurisé.
  2. Définissez le délai d'expiration : Incluez une exp raisonnable pour limiter l'abus de jetons.
  3. Protégez vos clés : Stockez vos clés en toute sécurité à l'aide de variables d'environnement ou d'un gestionnaire de clés.
  4. Évitez d'utiliser des données sensibles dans la charge utile : Incluez uniquement les informations non critiques.
  5. Utiliser un jeton d'actualisation : Associez un JWT à un jeton d'actualisation pour prolonger la session en toute sécurité.

Conclusion ?

JWT est un outil puissant pour une authentification sécurisée et sans état. La signature garantit l'intégrité et l'authenticité du jeton, ce qui rend JWT idéal pour les API et les systèmes distribués. En utilisant des bibliothèques comme jwt-go, vous pouvez facilement implémenter JWT dans votre projet Golang.

☕ Soutenez mon travail ☕

Si vous aimez mon travail, pensez à m'offrir un café ! Votre soutien m'aide à continuer à créer du contenu précieux et à partager des connaissances. ☕

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Golang: le langage de programmation Go expliquéGolang: le langage de programmation Go expliquéApr 10, 2025 am 11:18 AM

Les caractéristiques principales de GO incluent la collection de déchets, la liaison statique et le support de concurrence. 1. Le modèle de concurrence du langage GO réalise une programmation concurrente efficace via le goroutine et le canal. 2. Les interfaces et les polymorphismes sont implémentés via des méthodes d'interface, de sorte que différents types peuvent être traités de manière unifiée. 3. L'utilisation de base démontre l'efficacité de la définition et de l'appel des fonctions. 4. Dans une utilisation avancée, les tranches offrent des fonctions puissantes de redimensionnement dynamique. 5. Des erreurs courantes telles que les conditions de course peuvent être détectées et résolues par l'imagerie. 6. Optimisation des performances Réutiliser les objets via Sync.Pool pour réduire la pression de collecte des ordures.

Objectif de Golang: Construire des systèmes efficaces et évolutifsObjectif de Golang: Construire des systèmes efficaces et évolutifsApr 09, 2025 pm 05:17 PM

GO Language fonctionne bien dans la construction de systèmes efficaces et évolutifs. Ses avantages incluent: 1. Haute performance: compilé en code machine, vitesse de course rapide; 2. Programmation simultanée: simplifier le multitâche via les goroutines et les canaux; 3. Simplicité: syntaxe concise, réduction des coûts d'apprentissage et de maintenance; 4. Plate-forme multipliée: prend en charge la compilation multiplateforme, déploiement facile.

Pourquoi les résultats d'ordre par des déclarations dans le tri SQL semblent-ils parfois aléatoires?Pourquoi les résultats d'ordre par des déclarations dans le tri SQL semblent-ils parfois aléatoires?Apr 02, 2025 pm 05:24 PM

Confus quant au tri des résultats de la requête SQL. Dans le processus d'apprentissage de SQL, vous rencontrez souvent des problèmes déroutants. Récemment, l'auteur lit "Mick-SQL Basics" ...

La convergence de la pile technologique est-elle juste un processus de sélection de la pile technologique?La convergence de la pile technologique est-elle juste un processus de sélection de la pile technologique?Apr 02, 2025 pm 05:21 PM

La relation entre la convergence des piles technologiques et la sélection de la technologie dans le développement de logiciels, la sélection et la gestion des piles technologiques sont un problème très critique. Récemment, certains lecteurs ont proposé ...

Comment utiliser la comparaison de la réflexion et gérer les différences entre trois structures en Go?Comment utiliser la comparaison de la réflexion et gérer les différences entre trois structures en Go?Apr 02, 2025 pm 05:15 PM

Comment comparer et gérer trois structures en langue go. Dans la programmation GO, il est parfois nécessaire de comparer les différences entre deux structures et d'appliquer ces différences au ...

Comment afficher les packages installés à l'échelle mondiale dans Go?Comment afficher les packages installés à l'échelle mondiale dans Go?Apr 02, 2025 pm 05:12 PM

Comment afficher les packages installés à l'échelle mondiale dans Go? En train de se développer avec le langage Go, GO utilise souvent ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées?Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées?Apr 02, 2025 pm 05:09 PM

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire