Amazon web services 无法从AWS Cognito注销用户
我已经设置了一个使用AWS Cognito进行身份验证的API网关。用户登录后,我使用以下脚本验证其凭据:Amazon web services 无法从AWS Cognito注销用户,amazon-web-services,amazon-cognito,Amazon Web Services,Amazon Cognito,我已经设置了一个使用AWS Cognito进行身份验证的API网关。用户登录后,我使用以下脚本验证其凭据: const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider(); const params = { AuthFlow: 'ADMIN_NO_SRP_AUTH', ClientId: APP_CLIENT_ID, UserPoolId: USER_POOL_ID,
const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
const params = {
AuthFlow: 'ADMIN_NO_SRP_AUTH',
ClientId: APP_CLIENT_ID,
UserPoolId: USER_POOL_ID,
AuthParameters: {
'USERNAME': username,
'PASSWORD': password,
},
};
return cognitoidentityserviceprovider.adminInitiateAuth(params)
.promise();
这将返回一个JSON,如下所示:
{
"ChallengeParameters": {},
"AuthenticationResult": {
"AccessToken": "....",
"ExpiresIn": 3600,
"TokenType": "Bearer",
"RefreshToken": "....",
"IdToken": "...."
}
}
在客户端,我将注意到IdToken
,并将其作为标题包含在API网关授权者中提到的名称中
现在,我尝试创建一个lambda函数来注销用户。到目前为止,我得到了这个:
const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
const params = {
UserPoolId: USER_POOL_ID,
Username: username,
};
return cognitoidentityserviceprovider.adminUserGlobalSignOut(params)
.promise();
当我发送调用此代码的请求时,即使一切正常(不会引发错误),但
IdToken
仍然有效,我仍然可以使用它调用经过身份验证的请求。我的问题是,什么是注销用户的正确方式,为什么不起作用?你说得对。这是Amazon Cognito令牌的当前行为。如果您进行全局注销,则您的accessToken
和refreshttoken
将过期
但您的IdToken在1小时前仍然有效
如果您再次调用全局注销,您将看到访问令牌已过期的消息
我希望这有帮助 谢谢你的回答。我刚刚打了两次(甚至更多)全球注销电话,但都没用。顺便说一句,API调用没有返回任何东西,只是一个空对象(两次都是)。奇怪!我尝试从cli运行全局注销命令,它清楚地表明,
访问令牌被吊销或过期
您是否使用SDK或AWS cli进行了检查?如问题中所述,我使用了在NodeJs中实现的lambda函数。老实说,我现在不关心AWS CLI。@Mehran old post,但它可能会帮助其他人:问题是您不应该依赖id令牌进行身份验证(因为它不能被撤销),您应该始终检查访问令牌,如果该令牌有效,然后从id令牌中检索您需要的任何信息,以更精确地表达它(不能再编辑):您应该依靠Cognito来验证访问令牌的有效性,因为它们可能有一个已撤销令牌的数据库。否则,就不可能在JWT到期之前撤销它。