Maison >développement back-end >Golang >Comment analyser et vérifier facilement les jetons AWS Cognito JWT en 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!