【发布时间】:2018-03-28 19:42:49
【问题描述】:
我无法获得我的 CognitoIdentity 的凭据。当用户成功通过身份验证后,他需要获得一个身份才能访问其他 AWS 服务。就我而言,这就是 AWS IoT。但不知何故,我无法获得任何凭据。
这是错误信息:
检索凭据时出错:NotAuthorizedException:访问 身份 'eu-central-1:XXXXXXXXXX' 是 禁止。
我的代码几乎和 Github 上的教程一模一样:
var cognitoUser = new AWSCognito.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log("Logged in");
console.log('access token + ' + result.getAccessToken().getJwtToken());
// window.location.href = "index.html";
AWS.config.region = AWSConfiguration.region;
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: AWSConfiguration.IdPoolId,
Logins : {
'cognito-idp.eu-central-1.amazonaws.com/eu-central-1_XXXX' : result.getIdToken().getJwtToken()
}
});
var cognitoIdentity = new AWS.CognitoIdentity();
AWS.config.credentials.get(function(err, data) {
if (!err) {
console.log('retrieved identity: ' + AWS.config.credentials.identityId);
var params = {
IdentityId: AWS.config.credentials.identityId
};
cognitoIdentity.getCredentialsForIdentity(params, function(err, data) {
if (!err) {
thingShadows.updateWebSocketCredentials(data.credentials.AccessKeyId,
data.credentials.SecretKey,
data.credentials.SessionToken);
}
else {
console.log('error retrieving credentials: ' + err);
}
});
}
else {
console.log('error retrieving identity:' + err);
}
});
}
});
请注意,我跳过了不相关的代码。 经过身份验证的用户可以完全访问我正在使用的所有 AWS 服务。
【问题讨论】:
-
您需要将 IAM 策略附加到您需要访问的服务的 Cognito 的 IAM 角色。
-
我不想使用任何第三方登录,例如 facebook 或 google。我只想使用我自己的登录名,基于我的 cognito 用户池......我已经在我自己的网站上为经过身份验证的用户设置了一个 IAM 角色,但不知何故我无法让它工作。
-
然后将策略添加到 cognito 未经身份验证的角色
-
已经这样做了,出现同样的错误。
-
共享政策使用和更新问题
标签: javascript amazon-web-services aws-cognito aws-iot