2015-03-16 4 views
0

Мой запрос тест на Amazon Web Service API возвращается со следующей ошибкой:Подписанная нами подпись запроса не соответствует предоставленной вами подписке. Проверьте свой метод AWS Секретный ключ доступа и подписи

<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>ebe90459-1abd-403e-bfec-6916ebe07e1f</RequestId> 
</ItemSearchErrorResponse> 

Вот как я приехал на это:

<?php 

$private_key = "XXXXXXXXXXXXXXXXXXXXXX"; 
$date = urlencode(date('Y-m-d\TH:i:s.Z\Z', time())); 
$string_to_sign = "GET webservices.amazon.com /onca/xml/ AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXXXXXA&Keywords=Rocket&Operation=ItemSearch&SearchIndex=Toys&Service=AWSECommerceService&Timestamp=".$date.""; 
$signature = urlencode(base64_encode(hash_hmac("sha256",$string_to_sign, $private_key, True))); 
$url = "http://webservices.amazon.com/onca/xml?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXXXXXX&Keywords=Rocket&Operation=ItemSearch&SearchIndex=Toys&Service=AWSECommerceService&Timestamp=".$date."&Signature=".$signature.""; 

header("Location: ".$url.""); 

?> 

Я в основном хотел получить подписанный запрос REST непосредственно в URL-адресе (следовательно, функция заголовка), но оставил меня застрявшим с ошибкой. Я дважды проверял свой идентификатор доступа и секретный ключ, поэтому я знаю, что они не являются причиной проблемы. Разве это не правильный способ создания подписи?

ответ

0

Кажется, вы пытаетесь использовать подпись V2 для вызова REST API AWS. См. Полный список AWS REST API call documentation.

Моя ставка проблема в отсутствии SignatureVersion, SignatureMethod и Version в строке перед подписанием. Шаг пятый из приведенной выше документации показывает и пример строки, которая должна быть подписана:

GET\n 
elasticmapreduce.amazonaws.com\n 
/\n 
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Action=DescribeJobFlows&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2011-10-03T15%3A19%3A30&Version=2009-03-31 
+0

Да. Я исправил его, но только выполнил \ n и удалил все пробелы. – typescript

Смежные вопросы

 Смежные вопросы