Utilisation du jeton d'identification - Amazon Cognito

Utilisation du jeton d'identification

Le jeton d'identification est un jeton JWT (JSON Web Token) qui contient les demandes sur l'identité de l'utilisateur authentifié, comme name, email et phone_number. Vous pouvez utiliser ces informations d'identité dans votre application. Le jeton d'identification peut aussi servir à authentifier des utilisateurs auprès de vos serveurs de ressources ou applications de serveur. Vous pouvez également utiliser un jeton d'identification en dehors de l'application avec vos opérations d'API web. Dans ce cas, vous devez vérifier la signature du jeton d'identification avant de pouvoir approuver les revendications qu'il contient. Voir Vérification d'un jeton web JSON.

Vous pouvez définir l'expiration d'un jeton d'identification sur toute valeur comprise entre 5 minutes et 1 jour. Vous pouvez définir cette valeur par client d'application.

Important

Lorsque votre utilisateur se connecte avec l'interface utilisateur hébergée ou un fournisseur d'identité fédérée (IdP), Amazon Cognito définit des cookies de session valides pendant 1 heure. Si vous utilisez l'interface utilisateur hébergée ou la fédération et que vous spécifiez une durée minimale de moins d'une heure pour vos jetons d'accès et d'identification, vos utilisateurs disposent d'une session valide jusqu'à l'expiration du cookie. Si l'utilisateur a des jetons qui expirent pendant la session d'une heure, l'utilisateur peut actualiser ses jetons sans avoir besoin de se réauthentifier.

En-tête de jeton d'identification

L'en-tête contient deux éléments d'information : l'ID de clé (kid) et l'algorithme (alg).

{ "kid" : "1234example=" "alg" : "RS256", }
ID de clé (kid)

Le paramètre kid indique quelle clé a été utilisée pour sécuriser la signature JWS (JSON Web Signature) du jeton.

Pour plus d'informations sur le paramètre kid, consultez Paramètre d'en-tête Key identifier (kid).

Algorithme (alg)

Le paramètre 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 le paramètre alg, consultez Paramètre d'en-tête Algorithme (alg).

Charge utile du jeton d'identification

Voici un exemple de la charge utile d'un jeton d'identification. Il contient les demandes sur l'utilisateur authentifié. Pour plus d'informations sur les demandes standard OpenID Connect (OIDC), consultez les revendications standard OIDC.

{ "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "aud": "xxxxxxxxxxxxexample", "email_verified": true, "token_use": "id", "auth_time": 1500009400, "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example", "cognito:username": "janedoe", "exp": 1500013000, "given_name": "Jane", "iat": 1500009400, "email": "janedoe@example.com", "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" }
Sujet (sub)

La demande sub est un identifiant unique (UUID) pour l'utilisateur authentifié. Cet élément diffère du nom d'utilisateur qui peut ne pas être unique.

Diffuseur (iss)

La demande iss a le format suivant :

https://cognito-idp.{region}.amazonaws.com/{userPoolId}

Par exemple, supposons que vous ayez créé dans la région us-east-1 un groupe d'utilisateurs dont l'identifiant est u123456. Dans ce cas, le jeton d'identification émis pour les utilisateurs de votre groupe d'utilisateurs contient la valeur de revendication iss suivante :

https://cognito-idp.us-east-1.amazonaws.com/u123456
Public ciblé (aud)

Le contenu de la revendication aud est le paramètre client_id que l'utilisateur a demandé lorsqu'il s'est authentifié auprès de votre groupe d'utilisateurs.

Usage du jeton (token_use)

La demande The token_use décrit l'objectif prévu de ce jeton. Cette valeur correspond toujours à id dans le cas du jeton d'identification.

Heure d'authentification (auth_time)

La demande auth_time contient l'heure à laquelle l'authentification s'est produite. Sa valeur est un nombre JSON correspondant au nombre de secondes écoulées depuis le 1er janvier 1970 à 0:0:0 heure (1970-01-01T0:0:0Z) mesuré au format UTC. Après actualisation, auth_time représente l'heure à laquelle l'authentification d'origine s'est produite, et non celle où le jeton a été émis.

Nonce (nonce)

La revendication nonce provient d'un paramètre du même nom que vous pouvez ajouter aux requêtes de votre point de terminaison authorize OAuth 2.0. Lorsque vous ajoutez le paramètre, la revendication nonce est incluse dans le jeton d'identification émis par Amazon Cognito, et vous pouvez l'utiliser pour vous protéger contre les attaques de relecture. Si vous ne fournissez pas de valeur nonce dans votre demande, Amazon Cognito génère et valide automatiquement un nonce lorsque vous vous authentifiez via un fournisseur d'identité tiers, puis l'ajoute en tant que réclamation nonce au jeton d'identification. L'implémentation de la revendication nonce dans Amazon Cognito est basée sur les normes OIDC.

jti d'origine (origin_jti)

L'identifiant JWT d'origine, indiquant le moment où l'authentification d'origine a eu lieu.

jti (jti)

La revendication jti est un identifiant unique du JWT.

Le jeton d'identification peut contenir des revendications standard OIDC définies dans les Revendications standard OIDC. Le jeton d'identification peut également contenir des attributs personnalisés que vous définissez dans votre groupe d'utilisateurs. Amazon Cognito écrit des valeurs d'attribut personnalisées dans le jeton d'ID sous forme de chaînes quel que soit le type d'attribut.

Note

Les attributs personnalisés de groupe d'utilisateurs comportent toujours un préfixe personnalisé.

Signature de jeton d'identité

La signature du jeton d'identification est calculée en fonction de l'en-tête et de la charge utile du jeton JWT. Lorsqu'elle est utilisée à l'extérieur d'une application dans vos API web, vous devez toujours vérifier cette signature avant d'accepter le jeton. Consultez Vérification d'un jeton web JSON. Vérification d'un jeton web JSON.