API 网关用来验证 API 调用的 id 令牌保持有效一段时间。
我会测试访问令牌。它应该在您调用全局注销后立即过期。
关键词是上面的应该。请参阅this issue。让 AWS 实施立即撤销是一项持续的斗争。这是一个相关的报价:
我与 AWS Cognito 团队合作解决了这个问题,并通过 CLI 发布了修复程序,如下所示。
aws cognito-identity update-identity-pool --identity-pool-id --identity-pool-name --allow-unauthenticated-identities --cognito-identity-providers ProviderName=,ClientId=,ServerSideTokenCheck=<true|false>
通过在 Cognito 身份上将 ServerSideTokenCheck 设置为 true
池,该身份池将与 Cognito 用户池核对以生成
确保用户之前没有被全局注销或删除
身份池为
用户。现在我们遇到了这个 Token 被缓存的另一个问题
在 API Gateway 中停留 10 分钟,这将使该 OID 令牌仍然存在
即使用户已全局退出,也活动 10 分钟。
这就是我所说的 accessToken 测试的意思(我已经使用方法 #2 取得了成功):
1.) 你可以开发一个custom authorizer for API Gateway;
2.) 您可以在 lambda 函数的开头或在您的服务器上执行检查,使用:
const AWS = require('aws-sdk');
const awsConfig = require('./awsConfig');
const cognito = new AWS.CognitoIdentityServiceProvider(awsConfig);
// accessToken provided from API Gateway
new Promise((resolve, reject) => {
cognito.getUser({ accessToken }, (errorCallback, response) => {
if (errorCallback) {
reject(errorCallback);
} else {
resolve(response);
}
});
});
errorCallback 和 response 无关紧要。如果出现错误,则令牌无效。如果你不这样做,它是有效的。