Подписание SimpleDB HMAC

Я пишу базовый клиент для доступа к сервису Amazon SimpleDB, и у меня возникают проблемы с пониманием логики подписания запроса.

Вот пример запроса:

https://sdb.amazonaws.com/?Action=PutAttributes
&DomainName=MyDomain
&ItemName=Item123
&Attribute.1.Name=Color&Attribute.1.Value=Blue
&Attribute.2.Name=Size&Attribute.2.Value=Med
&Attribute.3.Name=Price&Attribute.3.Value=0014.99
&Version=2009-04-15
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&AWSAccessKeyId=<Your AWS Access Key ID>
Following is the string to sign.

Сообщение для подписи:

GET\n
sdb.amazonaws.com\n
/\n
AWSAccessKeyId=<Your AWS Access Key ID>
&Action=PutAttributes
&Attribute.1.Name=Color
&Attribute.1.Value=Blue
&Attribute.2.Name=Size
&Attribute.2.Value=Med
&Attribute.3.Name=Price
&Attribute.3.Value=0014.99
&DomainName=MyDomain
&ItemName=Item123
&SignatureMethod=HmacSHA256
&SignatureVersion=2
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00
&Version=2009-04-15

Ниже приведен подписанный запрос.

https://sdb.amazonaws.com/?Action=PutAttributes
&DomainName=MyDomain
&ItemName=Item123
&Attribute.1.Name=Color&Attribute.1.Value=Blue
&Attribute.2.Name=Size&Attribute.2.Value=Med
&Attribute.3.Name=Price&Attribute.3.Value=0014.99
&Version=2009-04-15
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00
&Signature=<URLEncode(Base64Encode(Signature))>
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&AWSAccessKeyId=<Your AWS Access Key ID>

Чего я не получаю, так это сообщения для подписи. Почему я не понимаю? ну, порядок параметров меняется между запросом и сообщением для подписи. В примере видно, что, возможно, параметры упорядочены в алфавитном порядке.

Кто-нибудь играл с SimpleDB, чтобы сказать мне, какая логика стоит за сообщением для подписи, то есть порядок параметров и т. Д. Документация здесь не очень конкретна.


person hookenz    schedule 29.11.2010    source источник


Ответы (2)


Чтобы ответить на мой собственный вопрос.

Ответ скрыт в документации. Я был прав, я должен сначала отсортировать параметры.

http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/index.html?Query_QueryAuth.html

person hookenz    schedule 29.11.2010
comment
Вы также можете просмотреть AWS SDK - person Rob Olmos; 29.11.2010

Для тех, кто читает этот вопрос позже, ниже приведена цитата из соответствующего раздела документации. Этот раздел, кажется, исчез из документов SimpleDB, но все еще присутствует в документах SQS. Это по-прежнему относится непосредственно к SimpleDB.

Ключевая проблема заключается в том, что вы должны правильно кодировать URL-адреса всех значений параметров HTTP.

  • Не кодируйте в URL какие-либо незарезервированные символы, определенные RFC 3986
    .

  • Этими незарезервированными символами являются A-Z, a-z, 0-9, дефис (-), подчеркивание (_), точка (.) и тильда (~).

  • Процент кодирует все остальные символы с помощью %XY, где X и Y — шестнадцатеричные символы 0-9 и заглавные буквы A-F.

  • Процент кодирует расширенные символы UTF-8 в форме %XY%ZA

  • Процент кодирует символ пробела как %20 (а не +, как это делают обычные схемы кодирования).

Распространенная ошибка связана с невозможностью закодировать символ звездочки (*), который может появляться как в значениях данных, так и в SelectExpressions.

person Mocky    schedule 29.11.2010
comment
Обратите внимание, что популярные онлайн-кодировщики URL-адресов также не кодируют звездочку:. См., например: meyerweb.com/eric/tools/dencoder и url-encode-decode.com. - person Riley Major; 01.08.2014