使用aws-sdk的AWS S3签名URL失败,其中包含" AuthorizationQueryParametersError"

时间:2017-06-25 01:53:04

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

我正在尝试在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>

我完全陷入困境,真的很感激如何解决它...... 谢谢!

1 个答案:

答案 0 :(得分:2)

我测试了你的代码。我只修改了[Symfony\Component\Debug\Exception\FatalThrowableError] Class 'Dwij\Laraadmin\LAProviderASDF' not found key。有用。我可能知道你正在使用的aws sdk版本和你正在使用的nodejs版本吗?我的测试是在nodejs 8.1.2和bucket上执行的。

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

aws-sdk@2.77.0(错误) - &gt; curl 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>(工作)

如果你没有双引号卷曲,那么&符号被shell解释为后台进程。

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

希望这有帮助。