【问题标题】:AWS S3 signed URLs with aws-sdk fails with "AuthorizationQueryParametersError"带有 aws-sdk 的 AWS S3 签名 URL 失败并显示“AuthorizationQueryParametersError”
【发布时间】:2017-06-25 01:53:03
【问题描述】:

我正在尝试为 S3 上的私有文件 test.png 创建预签名 URL。 我的代码:

var AWS = require('aws-sdk'); 

AWS.config.region = 'eu-central-1';

const s3 = new AWS.S3();

const key = 'folder/test.png';
const bucket = 'mybucket';
const expiresIn = 2000; 

const params = {
    Bucket: bucket,
    Key: key,
    Expires: expiresIn,
};
console.log('params: ', params);
console.log('region: ', AWS.config.region);

var url = s3.getSignedUrl('getObject', params);
console.log('url sync: ', url);

s3.getSignedUrl('getObject', params, function (err, urlX) {
    console.log("url async: ", urlX);
});

在控制台中返回一个 URL。 当我尝试访问它时,它显示

<Error>
<Code>AuthorizationQueryParametersError</Code>
<Message>
Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters.
</Message>
<RequestId>97377E063D0B1D09</RequestId>
<HostId>
6GE7EdqUvCEJis+fPoWR0Ffp2kN9Mlql4gs+qB4uY3hA4qR2wYrImkZfv05xy4XVjsZnRDVN63s=
</HostId>
</Error>

我完全被困住了,非常感谢一些关于如何解决它的想法。

【问题讨论】:

  • 签名的 URL 是否没有错误中列出的所有参数?它应该。你能举个例子吗?

标签: node.js amazon-s3 aws-sdk pre-signed-url


【解决方案1】:

我测试了您的代码。我只对keybucket 进行了修改。有用。我可以知道您正在使用的 aws sdk 版本和您正在使用的 nodejs 版本吗?我的测试是在 nodejs 8.1.2 和 aws-sdk@2.77.0 上执行的。

当我执行 curl 时,我能够重现您的错误。

curl url(错误)-> &lt;Error&gt;&lt;Code&gt;AuthorizationQueryParametersError&lt;/Code&gt;&lt;Message&gt;Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters.&lt;/Message&gt;

curl "url"(工作)

如果 curl 不带双引号,& 符号会被 shell 解释为后台进程。

或者,您可以尝试将生成的链接粘贴到浏览器中。

希望这会有所帮助。

【讨论】:

  • Omg... 双引号为我做了。不敢相信 curl 文档中没有记录 URL 需要用引号引起来。
猜你喜欢
  • 2018-10-20
  • 2016-12-14
  • 2020-09-25
  • 2019-05-08
  • 1970-01-01
  • 2022-12-18
  • 2016-10-08
  • 2022-11-03
相关资源
最近更新 更多