Comment révoquer des jetons JWT dans Amazon Cognito à l'aide de l'interface de l'AWS CLI ?

Dernière mise à jour : 18/08/2021

Je souhaite révoquer des jetons  JWT (JSON Web Token) émis dans un groupe d'utilisateurs Amazon Cognito.

Brève description

Les jetons d'actualisation d'Amazon Cognito expirent 30 jours après qu'un utilisateur se soit connecté à un groupe d'utilisateurs. Vous pouvez définir l'expiration du jeton d'actualisation du client d'application entre 60 minutes et 10 ans. Pour plus d'informations, consultez Utilisation du jeton d'actualisation.

Vous pouvez également révoquer des jetons d'actualisation en temps réel afin qu'ils ne puissent pas générer de jetons d'accès supplémentaires.

Aucun des jetons d'accès précédemment émis par le jeton d'actualisation n'est valide. Les jetons d'actualisation émis aux utilisateurs ne sont pas affectés.

Solution

Suivez les instructions de révocation du jeton JWT en fonction de votre client d'application.

Remarque :

Client d'application sans secret

Exécutez la commande admin-initiate-auth de l'interface de ligne de commande AWS (AWS CLI) pour lancer le flux d'authentification en tant qu'administrateur afin d'obtenir l'ID, le jeton d'accès et le jeton d'actualisation comme les éléments suivants :

$ aws  --region us-east-1 cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id your-client-id --auth-parameters USERNAME=user-name,PASSWORD=your-password --auth-flow ADMIN_NO_SRP_AUTH

Le résultat obtenu doit être similaire à ce qui suit :

{
    "ChallengeParameters": {},
    "AuthenticationResult": {
        "AccessToken": "eyJra....",
        "ExpiresIn": 3600,
        "TokenType": "Bearer",
        "RefreshToken": "ey.._9Dg",
        "IdToken": "ey..DU-Q"
    }
}

Exécutez la commande revoke-token de l'interface de ligne de commande AWS (AWS CLI) pour révoquer le jeton d'actualisation comme suit :

$ aws --region us-east-1 cognito-idp revoke-token --client-id your-client-id --token eyJra....

Remarque : vous ne recevez pas de sortie.

Effectuez un test avec le même jeton d'actualisation pour obtenir de nouveaux jeton d'accès et ID :

$ aws --region us-east-1 cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id your-client-id --auth-parameters REFRESH_TOKEN=eyJra....tw --auth-flow REFRESH_TOKEN_AUTH

La sortie indiquera que les jetons d'actualisation ont été révoqués comme suit :

Error: An error occurred (NotAuthorizedException) when calling the AdminInitiateAuth operation: Refresh Token has been revoked

Client d'application avec un secret

Suivez les instructions pour créer une valeur SecretHash à l'aide d'un script Python.

Exécutez la commande admin-initiate-auth de l'interface de ligne de commande AWS (AWS CLI) pour lancer le flux d'authentification en tant qu'administrateur afin d'obtenir l'ID, le jeton d'accès et le jeton d'actualisation comme les éléments suivants :

$ aws --region us-east-1 cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id your-client-id --auth-parameters USERNAME=user-name,PASSWORD=your-password,SECRET_HASH=IkVyH...= --auth-flow ADMIN_NO_SRP_AUTH

Le résultat obtenu doit être similaire à ce qui suit :

{
    "ChallengeParameters": {},
    "AuthenticationResult": {
        "AccessToken": "eyJra....",
        "ExpiresIn": 3600,
        "TokenType": "Bearer",
        "RefreshToken": "eyJjd....",
        "IdToken": "ey..YQSA"
    }
}

Exécutez la commande revoke-token de l'interface de ligne de commande AWS (AWS CLI) pour révoquer le jeton d'actualisation :

$ aws --region us-east-1 cognito-idp revoke-token --client-id your-client-id --token eyJjd... --client-secret 1n00....

Effectuez un test avec le même jeton d'actualisation pour obtenir de nouveaux jeton d'accès et ID :

$ aws --region us-east-1 cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id your-client-id --auth-parameters REFRESH_TOKEN=eyJjdH.... --auth-flow REFRESH_TOKEN_AUTH

La sortie indiquera que les jetons d'actualisation ont été révoqués :

Error: An error occurred (NotAuthorizedException) when calling the AdminInitiateAuth operation: Refresh Token has been revoked

Nouvelles demandes ajoutées

Deux nouvelles demandes, origin_jti et jti, sont ajoutées dans le jeton d'accès et d'identification, ce qui augmente la taille des jetons dans le client d'application.

La demande jti fournit un identifiant unique pour le jeton JWT. La valeur d'identificateur doit être affectée de sorte que la même valeur ne puisse pas être attribuée à un autre objet de données. Si le client d'application utilise plusieurs émetteurs, évitez les collisions en utilisant différentes valeurs.

Remarque : la demande jti est facultative. Pour plus d'informations, consultez RFC-7519.