我已经设置了使用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
仍然有效,我仍然可以使用它来调用经过身份验证的请求。我的问题是,注销用户的正确方法是什么,为什么它不起作用?
答案 0 :(得分:1)
你是对的。这是Amazon Cognito令牌的当前行为。如果您进行全局注销,则accessToken
和RefreshToken
将会过期。
但是您的IdToken仍然有效到1个小时。
如果再次调用“全局注销”,则您将看到以下消息:访问令牌已过期
我希望这会有所帮助!