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 JSON Web
Ces étapes décrivent la vérification d'un jeton JSON Web (JWT) d'un groupe d'utilisateurs.
Prérequis
Il se peut que votre bibliothèque ou votre infrastructure logicielle gère déjà les tâches décrites dans cette section. SDK AWS SDKsfournissez 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 AWS SDKs
-
Advanced workflows
(Flux de travail avancés) dans le Centre de développement Amplify
De nombreuses bibliothèques sont disponibles pour décoder et vérifier un jeton JSON Web (JWT). Si vous souhaitez traiter manuellement les jetons pour le API traitement côté serveur, ou si vous utilisez d'autres langages de programmation, ces bibliothèques peuvent vous aider. Consultez la liste des bibliothèques de la fondation OpenID pour travailler avec JWT des
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 revendications relatives au jeton d'accès contiennent les champs d'application OAuth 2.0 corrects.
-
Que les clés qui ont signé vos jetons d'accès et d'identification correspondent à une clé
kid
de signature provenant JWKSURIde vos groupes d'utilisateurs. JWKSURIIl contient des informations publiques sur la clé privée qui a signé le jeton de votre utilisateur. Vous pouvez trouver le fichier correspondant JWKS URI à 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 par jeton à votre application, réfléchissez au mode d'assemblage d'Amazon Cognito. JWTs 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 Amazon Cognito lors de la préparation JWTs de votre application.
Confirmez la structure du JWT
Un jeton JSON Web (JWT) comprend trois sections séparées par un séparateur .
(point).
- En-tête
-
L'ID de clé et l'RSAalgorithme utilisés par Amazon Cognito pour signer le jeton.
kid
alg
Amazon Cognito signe les jetons avec unalg
ayant pour valeurRS256
.kid
Il s'agit d'une référence tronquée à une clé de signature RSA privée de 2048 bits détenue par votre groupe d'utilisateurs. - 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 RSA256 identifiant dérivé d'une clé de signature et de paramètres que vous pouvez observer sur votre JWKSURI.
L'en-tête et la charge utile sont codés en JSON base64. Vous pouvez les identifier grâce aux premiers caractères eyJ
dont la forme déchiffrée correspond au caractère ouvrant {
. Si votre utilisateur présente un jeton codé en base64 JWT à votre application et qu'il n'est pas au format approprié[JSON
Header].[JSON Payload].[Signature]
, il ne s'agit pas d'un jeton Amazon Cognito valide et vous pouvez le supprimer.
Validez le JWT
La JWT signature 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 cryptographiques 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 JWT jeton
-
Décodez le jeton d'identification.
L'OpenID Foundation tient également à jour une liste de bibliothèques permettant de travailler avec JWT des
jetons. Vous pouvez également l'utiliser AWS Lambda pour décoder le groupe d'utilisateurs. JWTs Pour plus d'informations, consultez Décoder et vérifier les jetons Amazon JWT Cognito
à l'aide de. AWS Lambda -
Comparez l'ID de clé local (
kid
) à l'identifiantkid
public.-
Téléchargez et stockez la clé JSON Web publique correspondante (JWK) pour votre groupe d'utilisateurs. Il est disponible dans le cadre d'un ensemble de clés JSON Web (JWKS). Vous pouvez le localiser en élaborant les éléments suivants
jwks_uri
URI pour votre environnement :https://cognito-idp.
<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.jsonPour plus d'informations sur JWK et les JWK ensembles, consultez la section JSONWeb 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
) -
kid
Il s'agit d'un indice qui indique quelle clé a été utilisée pour sécuriser la signature JSON Web (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 utilisent un algorithme RS256 cryptographique, qui est une RSA signature avec SHA -256. Pour plus d'informationsRSA, voir la section RSACryptographie. - Type de clé (
kty
) -
Le
kty
paramètre identifie la famille d'algorithmes cryptographiques utilisée avec la clé, telle que « RSA » dans cet exemple. - RSAexposant ()
e
-
Le
e
paramètre contient la valeur de l'exposant pour la clé RSA publique. Elle est représentée sous la forme d'une valeur urlUInt codée en Base64. - RSAmodule ()
n
-
Le
n
paramètre contient la valeur du module pour la clé RSA publique. Elle est représentée sous la forme d'une valeur urlUInt codée en Base64. - 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é JSON Web publique une clé
kid
qui correspondkid
à votreJWT.
-
-
Utilisez une JWT bibliothèque pour comparer la signature de l'émetteur à celle du jeton. La signature de l'émetteur est dérivée de la clé publique (le RSA module
"n"
) du fichier jwks.json qui correspondkid
au jeton.kid
Vous devrez peut-être d'abord JWK convertir le PEM format en. L'exemple suivant prend le JWT JWK et utilise la bibliothèque Node.js, jsonwebtoken, pour vérifier la signature : JWT
Vérification des demandes.
Pour vérifier les JWT réclamations
-
À 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 à un API like GetUser. APIles demandes 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 le cadre de vos API opérations 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.