我尝试在Amazon和Salesforce之间建立联盟,这样:如果用户通过Salesforce正确进行身份验证,它将在给定帐户中看到所有S3存储桶。
很简单,我跟着this blog post改变了一些东西(即我没有使用DyanamoDb表,回调是为了简化S3存储桶)。我尝试实现的流程称为增强(简化)流程(详情here):
与文章相比,我略微修改了回调代码:
function onPageLoad() {
var url = window.location.href;
var match = url.match('id_token=([^&]*)');
var id_token = "";
if (match) {
id_token = match[1];
} else {
console.error("Impossibile recuperare il token");
}
AWS.config.region = "eu-west-1"
const cognitoParams = {
AccountId: "ACC_ID",
IdentityPoolId: "eu-west-1:XXX",
Logins: {
"login.salesforce.com": id_token
}
}
const identity = new AWS.CognitoIdentity()
identity.getId(cognitoParams, function (err, identityData) {
if (err) {
printMessage(err);
return;
}
const identityParams = {
IdentityId: identityData.IdentityId,
Logins: cognitoParams.Logins
}
identity.getCredentialsForIdentity(identityParams, function (err, data) {
if (err) {
printMessage(err);
} else {
var c = {
region: 'eu-west-1',
accessKeyId: data.Credentials.AccessKeyId,
secretAccessKey: data.Credentials.SecretKey
};
var s3 = new AWS.S3(c);
// HERE IS THE ERRORE - data is empty and response contains the error
s3.listBuckets((response, data) => {
data.Buckets.forEach(function (value) { appendMessage(value.Name) })
});
}
});
});
// IRRELEVANT CODE
}
我可以从Salesforce获取令牌,我可以获得访问权限和密钥,但是当我尝试列出桶时,我得到了简洁:
您提供的AWS访问密钥ID在我们的记录中不存在。
我发现这个错误是合理的,因为我根本没有用户,并且密钥是在运行中创建的。哪里可以碰到我的脑袋? SDK是2.103.0。
答案 0 :(得分:2)