Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何签署AWS API请求?_Javascript_Ajax_Amazon Web Services_Coffeescript_Meteor - Fatal编程技术网

Javascript 如何签署AWS 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

伙计们

我一直在开发(嗯,刚刚开始)一个web应用程序,它将利用来自AmazonWeb服务的图书搜索web API

我的问题是,为了使用它们的API,您必须使用HMAC SHA哈希对所有请求进行签名,并在将签名哈希发送给查询时将其附加到查询中

昨晚,在阅读了我可以得到的文档之后,我写了一些代码,似乎我正在使用我应该使用的哈希算法对AWSAPI的请求进行不正确的签名

以下是我当前用于访问其API的代码,出于自身安全考虑,删除了所有密钥:

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>