아마존의 제품 API에 요청을하려고하는데 서명을 얻는 방법을 알 수 없습니다. 나는 여기에 찾을 수있는 또 다른 스택 오버 플로우 게시물을 따르고 있었다 : How can I create a signature for AWS in Javascript?,하지만 여전히 내 요청을 이행 할 수 없습니다. 다음은 내가 보내는 요청입니다 (현재 우편 배달부를 통해 테스트 중입니다).아마존 웹 서비스 REST API에 요청을 보내면 요청을받을 수 없습니다. 서명이 작동하도록
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, 나는 당신이 '+'와 '='를 '%'표지로 대체 할 필요가 있다고 생각했다. 내가 그들을 변경할 때 %의, 나는이 응답 얻을
<?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>
:하지만 비록
<?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>
을 그대로 나는 +와 = 흔적을 떠날 때, 나는 AWS에서 다음과 같은 응답을 얻을 Signature 매개 변수가 요청에 있습니다. 내가 어떻게 고칠 수 있을지에 대한 생각. 난 당신이 '%'표시에 '+'와 '='교체 필요하다고 생각 https://www.npmjs.com/package/crypto-js
발견 된 MTurk 답변을 무시하십시오. 여기서는 전혀 다른 서명 알고리즘 인 것처럼 보입니다. [링크 된 페이지] (http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html)를 다시 읽으십시오. 그 단계를 정확하게 따르십시오. 귀하의 코드는 거기에 설명 된 것을 수행하지 않습니다. –