gpt4 book ai didi

javascript - AWS 认知 : Can't get Credentials

转载 作者:行者123 更新时间:2023-11-29 11:01:11 28 4
gpt4 key购买 nike

我无法获得我的 CognitoIdentity 的凭据。当用户通过身份验证成功后,他需要获得一个身份才能访问其他 AWS 服务。在我的例子中就是 AWS IoT。但不知何故,我无法获得任何凭证。

这是错误信息:

Error retrieving credentials: NotAuthorizedException: Access to Identity 'eu-central-1:XXXXXXXXXX' is forbidden.

我的代码几乎和 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 服务。

最佳答案

我认为您不需要调用 cognitoIdentity.getCredentialsForIdentity() .您的 IAM key 应放入 AWS.config.credentials打电话时反对 AWS.config.credentials.get() .您可以在调用时提供的回调中直接访问它们。

换句话说,当您注销 retrieved identity:在控制台中,凭据对象应该已经包含您的 key 、访问 key ID 和 session token 。

所有这些(提供或使用大括号):

 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);
}
});

可能可以用这样的东西代替:

thingShadows.updateWebSocketCredentials(AWS.config.credentials.accessKeyId,
AWS.config.credentials.secretKey,
AWS.config.credentials.sessionToken);

如果你传入 Logins映射其中的用户池 ID 和访问 token ,getCredentialsForIdentity()调用可能成功;我没有测试它。我还没有遇到需要使用这个特定 API 的用例,我怀疑您也不需要它。

资料来源:我开发了一个 100% javascript 应用程序,该应用程序同时使用经过身份验证和未经身份验证的 Cognito 身份。我们不叫getCredentialsForIdentity()任何地方,并尝试插入它都会产生与您遇到的相同的错误。

关于javascript - AWS 认知 : Can't get Credentials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46784659/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com