2017-07-06 33 views
0

我使用最新的aws cli工具生成了簽名的url。但是當我把一個對象使用捲曲時,我得到了signature does not match error無法使用簽名URL將對象上載到S3

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>

我們應該使用相同的密鑰的名字,當我們上傳的對象錯誤。
任何幫助將不勝感激。

回答

1

不幸的是,根據我的經驗,這個錯誤並沒有告訴你很多。

幾周前我有類似的問題,並通過在標頭中傳遞'主機'鍵來解決它。請參閱My AWS v4 Authorization Post

我發現如果我在Postman中執行操作,正確的簽名就會生成,所以我能夠查看標題中傳遞的內容並將其包含在我的代碼中。你可能想試試這個。除此之外,我所能建議的只是一種反覆試驗的方法。此外,AWS還有一些很好的文檔解釋簽名是如何生成的。也許你可以看看它並找出缺少的東西。

+0

謝謝@runnerpaul。 –

+0

但是在這裏我使用了aws cli工具來生成簽名的url。它有什麼區別? –

+0

嗯,我不是專家,所以這只是從我自己的經驗,但我認爲如果缺少一個不正確的簽名可能會產生。 另外,您是否在生成簽名後立即運行該捲曲?我認爲它有一個超時。 – runnerpaul

1

最後它得到了修復。我用下面的node.js片斷 `

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內容類型& &內容length`,沒有這些你將面對錯誤生成一個標識的URL。

相關問題