Maison >développement back-end >Golang >Comment analyser et vérifier facilement les jetons AWS Cognito JWT en Go ?

Comment analyser et vérifier facilement les jetons AWS Cognito JWT en Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-28 08:33:11304parcourir

How to Easily Parse and Verify AWS Cognito JWT Tokens in Go?

Analyse et vérification des jetons JWT d'AWS Cognito dans Go

Défi

Vérification et extraction des informations des jetons JWT émis par AWS Cognito peut être une tâche ardue en raison du manque de packages Go adaptés. Malgré l’utilisation de bibliothèques couramment disponibles, le processus reste complexe. Cet article vise à simplifier cette tâche en fournissant une solution étape par étape en utilisant les bibliothèques appropriées.

La clé de la validation : les clés publiques

Pour valider un jeton JWT , la clé publique correspondante est indispensable. Ces clés peuvent être obtenues à partir de l'URL JWK (JSON Web Key) fournie par AWS Cognito :

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json

Analyse des clés et vérification des jetons

Une approche recommandée consiste à utilisez les bibliothèques jwk et jwt-go en tandem. jwx simplifie l'analyse des clés publiques à partir de l'URL JWK, tandis que jwt-go aide à gérer le jeton JWT :

// Parse public keys
keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE)

// Verify JWT token
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    // Check signing method
    if _, ok := token.Method.(*jwt.SigningMethodRS256); !ok {
        return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
    }

    // Extract key ID ("kid") from JWT header
    kid, ok := token.Header["kid"].(string)
    if !ok {
        return nil, errors.New("kid header not found")
    }

    // Find the public key
    keys := keySet.LookupKeyID(kid)
    if !ok {
        return nil, fmt.Errorf("key with specified kid is not present in jwks")
    }

    // Parse public key
    var publickey interface{}
    err = keys.Raw(&publickey)
    if err != nil {
        return nil, fmt.Errorf("could not parse pubkey")
    }

    return publickey, nil

La simplicité retrouvée dans Go

En tirant parti de jwx et les bibliothèques jwt-go, le processus de validation et d'analyse des jetons JWT émis par AWS Cognito devient considérablement simplifié. Cette approche offre une solution claire et concise pour l'authentification et l'autorisation dans Go.

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