Maison > développement back-end > Golang > Comment vérifier les jetons AWS Cognito JWT dans Go ?

Comment vérifier les jetons AWS Cognito JWT dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-27 08:32:14
original
217 Les gens l'ont consulté

How to Verify AWS Cognito JWT Tokens in Go?

Vérification des jetons AWS Cognito JWT dans Go

Introduction

Validation et extraction d'informations de JWT les jetons émis par Amazon Cognito peuvent constituer un défi dans Go. Cet article fournit un guide concis pour gérer cette tâche efficacement.

Prérequis

Les utilisateurs d'AWS Cognito doivent récupérer la clé Web JSON publique (JWK) définie à partir du point de terminaison JWKS :

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json
Copier après la connexion

Analyse des JWK et vérification JWT

Pour analyser l'ensemble JWK et vérifier les JWT, pensez à utiliser :

  • [jwk](https://github.com/lestrat-go/jwx) : Pour JWK analyse
  • [jwt-go](https://github.com/dgrijalva/jwt-go) : pour la validation JWT

Implémentation

  1. Récupérez et analysez l'ensemble JWK en utilisant jwk.Fetch().
  2. Utilisez jwt.Parse() pour analyser le jeton JWT.
  3. Extrayez le champ "kid" de l'en-tête JWT pour identifier la clé publique correspondante dans l'ensemble JWK .
  4. Utilisez keySet.LookupKeyID(kid) pour récupérer la clé publique associée au "kid" header.
  5. Attribuez la clé publique au rappel func(token *jwt.Token) (interface{}, error) lors de l'analyse du jeton JWT.

Exemple Code

package main

import (
    "fmt"

    jwt "github.com/dgrijalva/jwt-go"
    "github.com/lestrrat-go/jwx/jwk"
)

func main() {
    // Replace with your Cognito token and Cognito JWKS endpoint
    tokenString := "YOUR_JWT_TOKEN"
    endpoint := "YOUR_COGNITO_JWKS_ENDPOINT"

    keySet, err := jwk.Fetch(endpoint)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Parse the JWT token and validate its signature using the public key
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        if _, ok := token.Method.(*jwt.SigningMethodRS256); !ok {
            return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
        }
        kid, ok := token.Header["kid"].(string)
        if !ok {
            return nil, errors.New("kid header not found")
        }
        keys := keySet.LookupKeyID(kid)
        if !ok {
            return nil, fmt.Errorf("key with specified kid is not present in jwks")
        }
        var publickey interface{}
        err = keys.Raw(&publickey)
        if err != nil {
            return nil, fmt.Errorf("could not parse pubkey")
        }
        return publickey, nil
    })

    if err != nil {
        fmt.Println(err)
        return
    }

    // Access the claims from the validated JWT token
    claims := token.Claims.(jwt.MapClaims)
    fmt.Println("User ID: ", claims["sub"])
}
Copier après la connexion

Conclusion

En utilisant des bibliothèques telles que jwk et jwt-go, les développeurs peuvent vérifier et récupérer efficacement les données des jetons Cognito JWT dans Go , offrant un moyen sécurisé et pratique d'authentifier les utilisateurs dans leurs applications.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal