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 pouvez vérifier manuellement le jeton d'identification pour confirmer la véracité des informations qu'il contient. Certains exemples incluent :

  • 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 les informations d'utilisateur Amazon Cognito contenues dans un jeton JWT Amazon Cognito, vous pouvez le décrypter et en vérifier la signature. Pour décrypter et vérifier le jeton JWT Amazon Cognito avec AWS Lambda, consultez la page Decode and verify Amazon Cognito JWT tokens sur le site Web GitHub.

Lorsqu'un utilisateur se connecte, un groupe d'utilisateurs Amazon Cognito envoie un jeton JWT qui correspond à une chaîne JSON codée sur 64 caractères contenant des informations relatives à l'utilisateur (demandes appelées). 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 JWT incluent 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 hachage SHA-256.

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

L'exemple suivant représente une charge utile contenant des informations sur l'utilisateur ainsi que les horodatages correspondant à la création et à 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"
}

L'exemple suivant représente une signature, laquelle 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 RSA pour chaque groupe d'utilisateurs. L'une des clés privées est utilisée pour signer le jeton. La clé publique correspondant est rendue disponible à une adresse avec ce format :

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

Le fichier 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 JWT Amazon Cognito, recherchez d'abord la clé disposant d'un ID de clé qui correspond à l'ID de clé du jeton JWT. Utilisez ensuite les bibliothèques pour décrypter le jeton et vérifier la signature. Assurez-vous également 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.

la résolution est adaptée à la plupart des applications. Pour utiliser AWS Lambda pour cette résolution, consultez la page Decode and verify Amazon Cognito JWT tokens du site Web 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