无法使用签名URL将对象上载到S3

时间:2017-07-06 09:50:46

标签: amazon-web-services amazon-s3

我使用最新的aws cli工具生成了签名网址。但是当我使用curl放置一个对象时,我得到了signature does not match error

curl命令我用过 curl -v -H "content-type:application/vnd.ms-excel" -T users.csv "https://a054.s3.amazonaws.com/upload/users.csv?AWSAccessKeyId=AKIAJ6U4CWQNUWMWSQ7Q&Expires=1499336527&Signature=gO57XqNKJ%2FmlkHDVXsL0i6Ul2CE%3D"

我得到的错误 <Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKIAJ6U4CWQNUWMWSQ7Q</AWSAccessKeyId>

我们上传对象时是否应该使用相同的键名 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

最后它得到修复。我使用以下node.js代码段生成了一个签名的url `

var aws = require('aws-sdk');
aws.config.update({region: 'eu-west-1'});
var s3 = new aws.S3({signatureVersion: 'v4'});
const bucketName = 'a055';
const keyName = 'app_dup.js';
const signedUrlExpireSeconds = 60 * 5;
const url = s3.getSignedUrl('putObject', {
    Bucket: bucketName,
    Key: keyName,
   "ContentType":'application/javascript',
    Expires: signedUrlExpireSeconds
});
console.log(url);

Then after i tried the postman tool for uploading an object. Thanks to @runnerpaul. Key headers to be included are内容类型&amp;&amp;内容长度`,没有那些你将面临错误。

答案 1 :(得分:1)

不幸的是,根据我的经验,错误并没有告诉你很多。

几个星期前我遇到了类似的问题,并通过在标题中传递“主机”键来解决它。请参阅My AWS v4 Authorization Post

我发现如果我在Postman中执行操作,则会生成正确的签名,因此我能够查看标头中传递的内容并将其包含在我的代码中。你可能想试试这个。除此之外,我所能提出的只是试错法。此外,AWS还有一些很好的文档说明了如何生成签名。也许你可以仔细研究它并找出遗失的东西。