Javascript 如何签署AWS API请求?
伙计们 我一直在开发(嗯,刚刚开始)一个web应用程序,它将利用来自AmazonWeb服务的图书搜索web API 我的问题是,为了使用它们的API,您必须使用HMAC SHA哈希对所有请求进行签名,并在将签名哈希发送给查询时将其附加到查询中 昨晚,在阅读了我可以得到的文档之后,我写了一些代码,似乎我正在使用我应该使用的哈希算法对AWSAPI的请求进行不正确的签名 以下是我当前用于访问其API的代码,出于自身安全考虑,删除了所有密钥:Javascript 如何签署AWS API请求?,javascript,ajax,amazon-web-services,coffeescript,meteor,Javascript,Ajax,Amazon Web Services,Coffeescript,Meteor,伙计们 我一直在开发(嗯,刚刚开始)一个web应用程序,它将利用来自AmazonWeb服务的图书搜索web API 我的问题是,为了使用它们的API,您必须使用HMAC SHA哈希对所有请求进行签名,并在将签名哈希发送给查询时将其附加到查询中 昨晚,在阅读了我可以得到的文档之后,我写了一些代码,似乎我正在使用我应该使用的哈希算法对AWSAPI的请求进行不正确的签名 以下是我当前用于访问其API的代码,出于自身安全考虑,删除了所有密钥: Meteor.methods "isbnSearc
Meteor.methods
"isbnSearch": (isbn) ->
ts = encodeURIComponent(new Date().toISOString())
reqArray = [
"Service=AWSCommerceService",
"Operation=ItemLookup",
"ResponseGroup=Medium%2CImages",
"IdType=ISBN",
"Timestamp="+ts,
"AWSAccessKeyId=<Access Key Here>",
"ItemId="+isbn,
"Version=2014-08-02"
]
req = reqArray.sort().join('&')
stringToSign = "Get\nwebservices.amazon.com\n/onca/xml\n" + req
theHash = CryptoJS.HmacSHA256(stringToSign, "<Secret Key Here>").toString()
request = req + "&Signature=" + theHash
reqURL = "http://webservices.amazon.com/onca/xml?" + request
result = HTTP.get reqURL, (e, res) ->
console.log res
根据(步骤9),您需要对签名中的所有+”和=”进行编码。您的代码中似乎没有这样做。我建议您使用现有的Meteorite aws sdk包之一: 它们添加了对AWS Node.js SDK的访问
您还可以添加NPM Meteorite软件包()来访问AWS Node.js SDK。这也是我的第一个想法,但是SDK似乎没有涵盖商业API,因为我面临这个错误。你能分享解决方案吗?
<?xml version="1.0"?>
<ItemLookupErrorResponse xmlns="http://ecs.amazonaws.com/doc/2014-08-02/">
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
</Error>
<RequestId>3377bde5-a006-429d-a1f6-8c4faf1b8efc</RequestId>
</ItemLookupErrorResponse>