Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Vérification d'un jeton web JSON
Ces étapes décrivent la vérification d'un jeton web JSON (JWT) de groupe d'utilisateurs.
Prérequis
Les tâches décrites dans cette section sont peut-être déjà traitées par votre bibliothèque, votre kit SDK ou votre infrastructure logicielle. AWS Les SDK fournissent des outils pour le traitement et la gestion des jetons du pool d'utilisateurs Amazon Cognito dans votre application. AWS Amplify inclut des fonctions permettant de récupérer et d'actualiser les jetons Amazon Cognito.
Pour plus d'informations, consultez les pages suivantes.
-
Exemples de code pour le fournisseur d'identité Amazon Cognito utilisant des SDK AWS
-
Advanced workflows
(Flux de travail avancés) dans le Centre de développement Amplify
De nombreuses bibliothèques sont disponibles pour le décodage et la vérification d'un jeton web JSON (JWT). De telles bibliothèques peuvent être utiles si vous voulez traiter manuellement des jetons pour le traitement d'API côté serveur, ou si vous utilisez d'autres langages de programmation. Consultez la liste de bibliothèques OpenID Foundation pour la gestion des jetons JWT
Validez les jetons avec aws-jwt-verify
Dans une application Node.js, AWS recommande à la aws-jwt-verifybibliothèqueaws-jwt-verify
, vous pouvez renseigner un CognitoJwtVerifier
avec les valeurs des champs standard que vous souhaitez vérifier pour un ou plusieurs groupes d'utilisateurs. Parmi les valeurs qu'il peut vérifier figurent les suivantes :
-
Les jetons d'accès ou d'identification ne sont pas mal formés ou n'ont pas expiré et possèdent une signature valide.
-
Les jetons d'accès provenaient des groupes d'utilisateurs et des clients d'application appropriés
. -
Les champs standard de jeton d'accès contiennent les étendues OAuth 2.0 correctes
. -
Les clés qui ont signé vos jetons d'accès et d'identification correspondent à une clé de signature
kid
provenant de l'URI JWKS de vos groupes d'utilisateurs. L'URI JWKS contient des informations publiques sur la clé privée utilisée pour signer le jeton de l'utilisateur. Vous trouverez l'URI JWKS de votre groupe d'utilisateurs à l'adresse
https://cognito-idp.
.<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.json
Pour plus d'informations et des exemples de code que vous pouvez utiliser dans une application Node.js ou un AWS Lambda
autorisateur, reportez-vous aws-jwt-verify
Comprendre et inspecter les jetons
Avant d'intégrer l'inspection des jetons à votre application, réfléchissez à la manière dont Amazon Cognito assemble les jetons JWT. Récupérez des exemples de jetons de votre groupe d'utilisateurs. Décodez et examinez-les en détail pour comprendre leurs caractéristiques et déterminer ce que vous souhaitez vérifier et à quel moment. Par exemple, vous pouvez examiner l'appartenance à un groupe dans un scénario et les étendues dans un autre.
Les sections suivantes décrivent un processus permettant d'inspecter manuellement les jetons JWT Amazon Cognito lorsque vous préparez votre application.
Vérification de la structure du jeton JWT.
Un jeton Web JSON (JWT) comprend trois sections séparées par un séparateur .
(point).
- En-tête
-
L'ID de clé,
kid
, et l'algorithme RSA,alg
, utilisés par Amazon Cognito pour signer le jeton. Amazon Cognito signe les jetons avec unalg
ayant pour valeurRS256
. - Charge utile
-
Champs standard du jeton. Dans un jeton d'identification, les champs standard incluent des attributs de l'utilisateur et des informations sur le groupe d'utilisateurs,
iss
, et le client d'application,aud
. Dans un jeton d'accès, la charge utile inclut les étendues, l'appartenance à un groupe, votre groupe d'utilisateurs en tant queiss
, et votre client d'application en tant queclient_id
. - Signature
-
La signature n'est pas décodable en base64 comme l'en-tête et la charge utile. Il s'agit d'un identifiant RSA256 dérivé d'une clé de signature et de paramètres que vous pouvez observer sur votre URI JWKS.
L'en-tête et la charge utile sont au format JSON codé en base64. Vous pouvez les identifier grâce aux premiers caractères eyJ
dont la forme déchiffrée correspond au caractère ouvrant {
. Si l'utilisateur présente un jeton JWT codé en base64 à votre application et qu'il n'est pas au format [JSON
Header].[JSON Payload].[Signature]
, ce n'est pas un jeton Amazon Cognito valide et vous pouvez l'ignorer.
Validation du jeton JWT
La signature du jeton JWT est une combinaison hachée de l'en-tête et de la charge utile. Amazon Cognito génère deux paires de clés de chiffrement RSA pour chaque groupe d'utilisateurs. Une clé privée signe les jetons d'accès et l'autre signe les jetons d'identification.
Pour vérifier la signature d'un jeton JWT
-
Décodez le jeton d'identification.
OpenID Foundation gère également une liste de bibliothèques pour la gestion des jetons JWT
. Vous pouvez également l'utiliser AWS Lambda pour décoder les JWT du groupe d'utilisateurs. Pour plus d'informations, consultez Décoder et vérifier les jetons Amazon Cognito JWT
à l'aide de. AWS Lambda -
Comparez l'ID de clé local (
kid
) à l'identifiantkid
public.-
Téléchargez et stockez la clé web JSON (JWK) publique correspondante pour votre groupe d'utilisateurs. Elle est disponible dans le cadre d'un ensemble de clés web JSON (JWKS). Vous pouvez le localiser en construisant l'URI
jwks_uri
suivant pour votre environnement :https://cognito-idp.
<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.jsonPour plus d'informations sur les clés JWK et les ensembles de clés JWK, consultez JSON Web Key (JWK)
. Note
Amazon Cognito peut effectuer une rotation des clés de signature dans votre groupe d’utilisateurs. Une bonne pratique consiste à mettre en cache les clés publiques de votre application, en utilisant l'identifiant
kid
comme clé de cache, et à actualiser régulièrement le cache. Comparez l'identifiantkid
dans les jetons que votre application reçoit à votre cache.Si vous recevez un jeton avec l'émetteur approprié, mais un identifiant
kid
différent, Amazon Cognito a peut-être effectué la rotation de la clé de signature. Actualisez le cache à partir du point de terminaisonjwks_uri
de votre groupe d'utilisateurs.Ceci est un exemple de fichier
jwks.json
:{ "keys": [{ "kid": "1234example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "1234567890", "use": "sig" }, { "kid": "5678example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "987654321", "use": "sig" }] }
- ID de clé (
kid
) -
L'identifiant
kid
indique quelle clé a été utilisée pour sécuriser la signature Web JSON (JWS) du jeton. - Algorithme (
alg
) -
Le paramètre d'en-tête
alg
indique l'algorithme de chiffrement utilisé pour sécuriser le jeton d'identification. Les groupes d'utilisateurs se servent d'un algorithme de chiffrement RS256, qui est une signature RSA avec SHA-256. Pour plus d'informations sur RSA, consultez Chiffrement RSA. - Type de clé (
kty
) -
Le paramètre
kty
identifie la famille d'algorithmes de chiffrement utilisée avec la clé, comme « RSA » dans cet exemple. - Exposant RSA (
e
) -
Le paramètre
e
contient la valeur d'exposant pour la clé publique RSA. Il est représenté sous la forme d'une valeur encodée en Base64urlUInt. - Modulo RSA (
n
) -
Le paramètre
n
contient la valeur de module pour la clé publique RSA. Il est représenté sous la forme d'une valeur encodée en Base64urlUInt. - Use (
use
) -
Le paramètre
use
décrit l'utilisation prévue de la clé publique. Dans cet exemple, la valeuruse
sig
représente la signature.
- ID de clé (
-
Recherchez dans la clé Web JSON publique un identifiant
kid
correspondant à l'identifiantkid
de votre jeton JWT.
-
-
Utilisez une bibliothèque JWT pour comparer la signature de l'émetteur à celle du jeton. La signature du diffuseur est dérivée de la clé publique (le modulus RSA)
"n"
) dukid
dans jwks.json qui correspond au jetonkid
. Vous pouvez avoir besoin de convertir d'abord la clé JWK au format PEM. L'exemple suivant utilise le jeton JWT, la clé JWK et la bibliothèque Node.js, jsonwebtoken, pour vérifier la signature du jeton JWT :
Vérification des demandes.
Pour vérifier les demandes de jeton JWT.
-
À l'aide de l'une des méthodes suivantes, vérifiez que le jeton n'a pas expiré.
-
Décodez le jeton et comparez le champ standard
exp
à l'heure actuelle. -
Si votre jeton d'accès inclut une
aws.cognito.signin.user.admin
réclamation, envoyez une demande à une API telle que GetUser. Les demandes d'API que vous autorisez avec un jeton d'accès renvoient une erreur si votre jeton a expiré. -
Présentez votre jeton d'accès dans une demande adressée au Point de terminaison UserInfo. Votre demande renvoie une erreur si votre jeton a expiré.
-
-
La demande
aud
dans un jeton d'identification et la demandeclient_id
dans un jeton d'accès doivent correspondre à l'ID de client d'application créé dans le groupe d'utilisateurs Amazon Cognito. -
La demande du diffuseur (
iss
) doit correspondre à votre groupe d'utilisateurs. Par exemple, un groupe d'utilisateurs créé dans la régionus-east-1
a la valeuriss
suivante :https://cognito-idp.us-east-1.amazonaws.com/
.<userpoolID>
-
Vérifiez la demande
token_use
.-
Si vous acceptez uniquement le jeton d'accès dans vos opérations de l'API web, sa valeur doit être
access
. -
Si vous utilisez uniquement le jeton d'identification, sa valeur doit indiquer
id
. -
Si vous utilisez des jetons d'identification et d'accès, la demande
token_use
doit êtreid
ouaccess
.
-
Vous pouvez désormais approuver les demandes à l'intérieur du jeton.