从Apex调用S3时无效的AWS Access Key

我正在尝试使用从AssumeRole返回的凭据从Apex访问s3。但是,我收到以下错误:

BACK:
app.use(session({
  name: process.env.SESS_NAME,resave: false,saveUninitialized: false,secret: process.env.SESS_SECRET,cookie: {
    maxAge: parseInt(process.env.SESS_LIFETIME),sameSite: true,//strict,secure: process.env.NODE_ENV === "production"
  }
}))

FRONT:
import Cookies from "js-cookie";
...
console.log("cookie",Cookies.get("sid"));

我能够使用从AssumeRole返回的凭据从CLI在此s3存储桶上成功调用GetObject,因此我可以合理地确定我的存储桶权限已正确设置。我在Apex中有以下代码:

<Message>The AWS access Key Id you provided does not exist in our records.</Message>
<AWSaccessKeyId>ASIA********</AWSaccessKeyId>

似乎AWS正在读取accessKeyId / Secret,而不是会话令牌。我也尝试将x-amz-security-token设置为标头,但这会引发403错误-签名不匹配。我是否在标题或签名中丢失了一些内容,这些内容会使此请求成功返回?

lwnxtb 回答:从Apex调用S3时无效的AWS Access Key

结果是我将x-amz-security-token标头放置在错误的位置。它需要在格式化日期之后立即在规范的AMZ标头部分中出现,并用逗号分隔名称和值:

String stringToSign = 'GET\n\n\n' + formattedDateString + '\n' + 'x-amz-security-token:' + sessionToken + '\n' + '/' + bucketname + '/' + filename;

此外,以下行需要取消注释:

req.setHeader('x-amz-security-token',sessionToken);

最后,请确保标头和规范化的AMZ标头均未大写。

本文链接:https://www.f2er.com/3099744.html

大家都在问