向Amazon web服务REST api发出请求时,无法使请求签名工作
Making requests to Amazon web services REST APIs, cannot get the request Signature to work
所以我试图向亚马逊的产品API发出请求,但我不知道如何获得签名工作。我正在关注另一篇堆栈溢出的文章,可以在这里找到:如何用Javascript为AWS创建签名?但仍不能满足我的要求。这是我正在发送的请求,(目前正在通过邮递员测试)。
http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=[MY_ACCESSKEY]&Operation=ItemSearch&Keywords=the%20hunger%20games&SearchIndex=Books &Timestamp=2016-09-09T12:00:00Z&Signature=9RTSas234dfRTs3R%ErA8%
我编造了一个假签名,类似于我从这个函数得到的签名:
let service = "AWSECommerceService";
let timestamp = "2016-09-09T12:00:00Z";
let operation = "ItemSearch";
let secret = "MY_AMAZONSECRET";
let signature = CryptoJS.HmacSHA1(service + operation + timestamp, secret).toString(CryptoJS.enc.Base64);
console.log(signature);
记录到控制台的结果如下所示:9RTSas234dfRTs3R+ErA8=
从我在这里读到http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html,我认为你需要将'+'和'='替换为'%'符号。当我保持+和=符号不变时,我从AWS得到以下响应:
<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05/">
<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>{MY_REQUESTID}</RequestId>
</ItemSearchErrorResponse>
但是当我将它们更改为%'s时,我得到了这样的响应:
<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05/">
<Error>
<Code>MissingParameter</Code>
<Message>The request must contain the parameter Signature.</Message>
</Error>
<RequestId>{MY_REQUESTID}</RequestId>
</ItemSearchErrorResponse>
即使请求中存在Signature参数。我该怎么解决这个问题。我使用crypto-js来创建签名,可以在这里找到:https://www.npmjs.com/package/crypto-js
我认为你需要将'+'和'='替换为'%'符号。
是的,但你不能只是用%
代替它们。使用这个映射:
+ becomes %2B
/ becomes %2F
= becomes %3D
这被称为url编码、url转义或百分比编码。这些字符被替换为文字%
,后面跟着它们的2位十六进制ASCII等价物。
9RTSas234dfRTs3R+ErA8= becomes
9RTSas234dfRTs3R%2BErA8%3D
- jQuery Ajax GET请求工作不正常
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- Javascript:JSON请求仅在第一次工作
- Jquery ajax方法请求体为null,但poster工作正常
- AWS API网关返回400错误请求,但Postman工作正常
- 只需添加一个'允许跨来源请求'到我的节点应用程序工作
- web工作程序中不同的服务器请求行为
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- Web 工作线程中的同步 XHR 请求是否仍会锁定浏览器
- 使用jQuery同步Ajax请求;我不能在Adobe Air上工作
- 跨源请求被POST阻止,但浏览器上的req可以正常工作,但设备上不工作
- API请求在使用phonegap调试时不工作,但在模拟器中工作,为什么
- 在处理请求工作时显示“正在处理”
- MVC 模型绑定无法通过 AJAX 请求工作
- 我不能让我的JSON请求工作
- 为什么post请求工作在本地而不是远程?搜索到的Url不同
- Ajax请求工作,但没有输出
- 如何循环大量的URL请求工作
- Ajax请求工作,但没有CSS和JavaScript
- 可以't设法使CORS请求工作