我使用最新的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>
我们上传对象时是否应该使用相同的键名 任何帮助将不胜感激。
答案 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还有一些很好的文档说明了如何生成签名。也许你可以仔细研究它并找出遗失的东西。