无法从AWS Cognito注销用户

时间:2018-11-21 15:13:38

标签: 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,
    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仍然有效,我仍然可以使用它来调用经过身份验证的请求。我的问题是,注销用户的正确方法是什么,为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

你是对的。这是Amazon Cognito令牌的当前行为。如果您进行全局注销,则accessTokenRefreshToken将会过期。

  

但是您的IdToken仍然有效到1个小时。

如果再次调用“全局注销”,则您将看到以下消息:访问令牌已过期

我希望这会有所帮助!