我想撤销在 Amazon Cognito 用户群体中颁发的 JSON Web 令牌(JWT)。
简短描述
Amazon Cognito 刷新令牌在用户登录用户池后 30 天到期。您可以将应用程序客户端刷新令牌过期时间设置为 60 分钟到 10 年。有关更多信息,请参阅使用刷新令牌。
您也可以实时撤销刷新令牌。这样可以确保刷新令牌无法生成额外的访问令牌。刷新令牌之前颁发的所有访问令牌都无效。
撤销刷新令牌时,这对与并行用户会话关联的其他刷新令牌没有影响。
解决方法
要撤销 JWT 令牌,请参阅基于您的应用程序客户端的相关说明。
注意:
- 如果您在运行 AWS Command Line Interface (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
- Amazon Cognito 用户池应用程序客户端可以拥有应用程序的可选密钥。有关更多信息,请参阅配置用户池应用程序客户端。
- 将 us-east-1 替换为您所在的 AWS 区域,将用户池 ID、客户端 ID、用户名、电子邮件、令牌、密钥和密码替换为您的变量。
不含密钥的应用程序客户端
以管理员身份运行 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 脚本创建 SecretHash 值。
以管理员身份运行 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_jti 和 jti,这增加了应用程序客户端中令牌的大小。
jti 声明为 JWT 提供了唯一标识符。必须分配标识符值,以便不会将相同的值分配给不同的数据对象。如果应用程序客户端使用多个颁发者,则使用不同的值来防止冲突。
**注意:**jti 声明是可选的。有关更多信息,请参阅互联网工程任务组网站上的 RFC-7519)。
相关信息
验证 JSON Web 令牌
撤销刷新令牌
如何才能解码和验证 Amazon Cognito JSON Web Token 签名?