如何使用 AWS CLI 在 Amazon Cognito 中撤销 JWT 令牌?

上次更新日期:2021 年 8 月 18 日

我想撤销在 Amazon Cognito 用户池中颁发的 JSON Web 令牌 (JWT)

简短描述

Amazon Cognito 刷新令牌在用户登录用户池后 30 天到期。您可以将应用程序客户端刷新令牌过期时间设置为 60 分钟到 10 年。有关更多信息,请参阅使用刷新令牌

您还可以实时撤销刷新令牌,这样刷新令牌就不能生成额外的访问令牌。

刷新令牌之前颁发的所有访问令牌都无效。已颁发给用户的刷新令牌不受影响。

解决方法

按照说明根据您的应用客户端撤销 JWT 令牌。

注意:

不含密钥的应用程序客户端

以管理员身份运行 AWS CLI 命令 admin-initiate-auth 来启动身份验证流程,以获取类似于以下内容的 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 USERNAME=user-name,PASSWORD=your-password --auth-flow ADMIN_NO_SRP_AUTH

您会收到类似如下内容的输出:

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

运行 AWS CLI 命令 revoke-token 以撤销刷新令牌,类似如下内容:

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

注意:您没有收到输出。

使用相同的刷新令牌进行测试,以获取新的访问令牌和 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

您会收到类似如下内容的刷新令牌撤销输出:

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

包含密钥的应用程序客户端

按照说明使用 Python 脚本创建 SecrethHash 值

以管理员身份运行 AWS CLI 命令 admin-initiate-auth 来启动身份验证流程,以获取类似于以下内容的 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 USERNAME=user-name,PASSWORD=your-password,SECRET_HASH=IkVyH...= --auth-flow ADMIN_NO_SRP_AUTH

您会收到类似如下内容的输出:

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

运行 AWS CLI 命令 revoke-token 以撤销刷新令牌:

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

使用相同的刷新令牌进行测试,以获取新的访问令牌和 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

您会收到刷新令牌撤销的输出:

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

新增声明

访问和 ID 令牌中添加了两个新的声明 origin_jtijti,这增加了应用程序客户端中令牌的大小。

jti 声明为 JWT 提供了唯一标识符。必须分配标识符值,以便不会将相同的值分配给不同的数据对象。如果应用程序客户端使用多个发布者,请使用不同的值来防止冲突。

注意:jti 声明是可选的。有关更多信息,请参阅 RFC-7519


这篇文章对您有帮助吗?


您是否需要账单或技术支持?