我正在使用nodejs lamdas从AWS Cognito获取身份验证令牌,而在前端代码中我使用的是“aws-sdk”:“^ 2.74.0”javascript / typescript sdk:
var creds = new AWS.CognitoIdentityCredentials({
IdentityPoolId: environment.identityPoolId
})
AWS.config.update({
region: environment.region,
credentials: creds
});
var lambda = new AWS.Lambda();
当我通过以下方式将令牌和身份ID签名到我的AWS.CognitoIdentityCredentials.params时:
creds.params['IdentityId'] = output.identityId;
creds.params['Logins'] = {};
creds.params['Logins']['cognito-identity.amazonaws.com'] = output.token;
creds.expired = true;
我能够获得以下lamda.invoke调用,以使用为我的联合身份池配置的经过身份验证的角色arn。 我遇到的问题是当我尝试签署用户时。我阅读了许多论坛帖子,但似乎没有人对此有明确的解释。我尝试在前端注销功能中使用以下功能,但没有帮助:
creds.clearCachedId();
creds.refreshPromise();
任何示例显示javascript aws-sdk如何清除会话/身份验证信息并切换回未经身份验证的用户角色arn或注销用户并更新配置,以便下次调用AWS服务(在我的情况下为lambda.invoke)使用未经身份验证的角色arn而不是尝试使用经过身份验证的角色。所以似乎Cognito不知道这个sigout,或者我错过了让它知道的呼吁。我希望creds.clearCachedId()能做到,但显然不是。
答案 0 :(得分:0)
事实证明我需要手动清除creds.params:
creds.params['IdentityId'] = null;
creds.params['Logins'] = null;
我认为下面会这样做,但显然不是。
creds.clearCachedId();
creds.refreshPromise();