Amazon web services 无法从AWS Cognito注销用户

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,

我已经设置了一个使用AWS Cognito进行身份验证的API网关。用户登录后,我使用以下脚本验证其凭据:

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到期之前撤销它。