Je souhaite utiliser un groupe d'utilisateurs Amazon Cognito en tant que méthode d'authentification pour mon application. Existe-t'il une méthode fiable de vérifier les jetons d'identification et d'accès envoyés par les clients à mon application ?

Chaque fois que les clients s'authentifient dans votre application par l'intermédiaire d'un groupe d'utilisateurs, Amazon Cognito envoie un jeton d'identification. Vous souhaiterez peut-être vérifier le jeton d'identification dans des scénarios similaires à ce qui suit :

  • Vous avez créé une application Web et souhaitez utiliser un groupe d'utilisateurs Amazon Cognito pour l'authentification.
  • Vous utilisez un groupe d'utilisateurs Amazon Cognito pour l'authentification et un groupe d'identité Amazon Cognito pour récupérer les informations d'identification temporaires AWS Security Token Service. AWS Lambda est invoqué grâce à ces informations d'identification, mais Lambda ne possède pas les informations concernant la personne qui s'est initialement authentifiée avec le groupe d'utilisateurs.

Pour obtenir des détails utilisateur Amazon Cognito contenus dans un jeton Amazon Cognito JSON Web Token (JWT), vous pouvez le décoder, puis vérifier la signature. Pour obtenir des exemples de code sur le décodage et la vérification d'un jeton Amazon Cognito JWT à l'aide d'AWS Lambda, consultez Décoder et vérifier les jetons Amazon Cognito JWT sur le site web de GitHub.

Une fois qu'un utilisateur s'est connecté, un groupe d'utilisateurs Amazon Cognito renvoie un jeton JWT, c'est-à-dire une chaîne JSON codée en base64 qui contient des informations sur l'utilisateur (nommées revendications). Amazon Cognito renvoie trois jetons : le jeton d'identification, le jeton d'accès et le jeton d'actualisation. Le jeton d'identification contient les champs d'utilisateur définis dans le groupe d'utilisateurs Amazon Cognito.

Les jetons sont composés de trois sections : un en-tête, une charge utile et une signature.

L'exemple suivant représente l'en-tête d'un jeton d'identification. L'en-tête contient l'ID de clé (« kid »), ainsi que l'algorithme (« alg ») utilisé pour signer le jeton. Dans cet exemple, l'algorithme est « RS256 », qui est une signature RSA avec SHA-256.

{
  "kid": "abcdefghijklmnopqrsexample=",
  "alg": "RS256"
}

Voici un exemple de la charge utile, qui contient des informations sur l'utilisateur, ainsi que des horodatages de la création et de l'expiration du jeton :

{
  "sub": "aaaaaaaa-bbbb-cccc-dddd-example",
  "aud": "xxxxxxxxxxxxexample",
  "email_verified": true,
  "token_use": "id",
  "auth_time": 1500009400,
  "iss": "https://cognito-idp.ap-southeast-2.amazonaws.com/ap-southeast-2_example",
  "cognito:username": "anaya",
  "exp": 1500013000,
  "given_name": "Anaya",
  "iat": 1500009400,
  "email": "anaya@example.com"
}

La dernière section est la signature, qui est une combinaison hachée et chiffrée de l'en-tête et de la charge utile.

Amazon Cognito génère deux paires de clés RSA pour chaque groupe d'utilisateurs. La clé privée de chaque paire est utilisée pour signer le jeton d'identification respectif ou le jeton d'accès. Les clés publiques sont rendues disponibles à une adresse dont le format est le suivant :

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

Le fichier JSON (jwks.json) est structuré selon ce format :

{
    "keys": [{
        "alg": "RS256",
        "e": "AQAB",
        "kid": "abcdefghijklmnopqrsexample=",
        "kty": "RSA",
        "n": "lsjhglskjhgslkjgh43lj5h34lkjh34lkjht3example",
        "use": "sig"
    }, {
        "alg":
        "RS256",
        "e": "AQAB",
        "kid": "fgjhlkhjlkhexample=",
        "kty": "RSA",
        "n": "sgjhlk6jp98ugp98up34hpexample",
        "use": "sig"
    }]
}

Pour vérifier la signature d'un jeton Amazon Cognito JWT, commencez par rechercher la clé publique avec un ID de clé correspondant à l'ID de clé de l'en-tête du jeton. Ensuite, vous pouvez utiliser des bibliothèques telles que celles recommandées par jwt.io ou OpenID Foundation, afin de valider la signature du jeton et d'extraire des valeurs telles que l'expiration et le nom d'utilisateur.

Outre la signature, il est également recommandé de vérifier que :

  • le jeton n'a pas expiré.
  • le public ciblé (« aud ») spécifié dans la charge utile correspond à l'ID du client d'application créé dans le groupe d'utilisateurs Amazon Cognito.

Pour obtenir des exemples de code sur le décodage et la vérification d'un jeton Amazon Cognito JWT à l'aide d'AWS Lambda, consultez Décoder et vérifier les jetons Amazon Cognito JWT sur le site web de GitHub.


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.

Date de publication : 13/02/2018

Date de mise à jour : 24/07/2018