2016-09-08 6 views
0

아마존의 제품 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

+0

발견 된 MTurk 답변을 무시하십시오. 여기서는 전혀 다른 서명 알고리즘 인 것처럼 보입니다. [링크 된 페이지] (http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html)를 다시 읽으십시오. 그 단계를 정확하게 따르십시오. 귀하의 코드는 거기에 설명 된 것을 수행하지 않습니다. –

답변

0

: 나는 여기에서 찾을 수 있습니다 서명을 만들 암호화-JS를 사용하고 있습니다.

예,하지만 이것을 %으로 바꿀뿐입니다. 이지도 사용 :

+ becomes %2B 
/becomes %2F 
= becomes %3D 

이것을 URL 인코딩, URL 이스케이프 또는 퍼센트 인코딩이라고합니다. 문자는 리터럴 %으로 대체되며 그 뒤에 2 자리 16 진수 ASCII가옵니다.

9RTSas234dfRTs3R+ErA8= becomes 
9RTSas234dfRTs3R%2BErA8%3D 
+0

나는 이것을 시도했지만 여전히 서명이 일치하지 않는다고 말하고있다. 내가 데이트를 만드는 방식 일 수 있을까? 내가하고있는 일은 다음과 같은 함수에 수동으로 입력하기 때문입니다.'2016-09-10T12 : 00 : 00Z' 날짜를 생성하기 위해 뭔가 다른 것을 사용해야합니까? – hermt2