2015-09-29 2 views
2

Мне поручено интегрироваться с API Amazon Gift Codes On Demand (AGCOD) RESTful. Мы обязаны подписывать наши запросы, используя Signature Version 4, что-то, что выполняется их AWS SDK for .NET для других услуг, но не AGCOD.Осмотреть HttpRequestMessage перед отправкой

Я использую класс HttpClient из пространства имен System.Net.Http для связи с API AWS. Это, в свою очередь, использует HttpClientHandler для создания HttpRequestMessage. При этом к сообщению добавляются дополнительные заголовки, такие как Host, Content-Length и Connection.

Мой вопрос в том, как я могу осмотреть сообщение после того, как я позвонил PostAsync, и заголовки были добавлены, но прежде чем он будет отправлен на сервер, чтобы я мог вычислить и добавить подпись?

Я мог бы просто просто указать эти заголовки самостоятельно. Но это помогает только известным заголовкам. Если используется другой HttpMessageHandler (например, WebRequestHandler), то могут быть добавлены различные заголовки (например, Content-Encoding и Cache-Control). Если я не знаю обо всех заголовках сообщения, я не смогу вычислить правильную подпись.

ответ

2

Большинство и, вероятно, все услуги AWS на самом деле не требуют от вас включать все Заголовки. Кажется, Амазонка предположила, что это будет проблематично, именно по той причине, о которой вы говорите.

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

http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html

Как правило, заголовки вы потребность добавить те, вы уже знаете о на уровне приложения, такие как любые службы конкретных x-amz-* заголовков. Примеры заголовков, о которых вам не нужно беспокоиться, включают в себя: User-Agent:. Один заголовок, который часто добавляется клиентской библиотекой http, является заголовком Date:, но если вы включаете правильно отформатированный заголовок x-amz-date: с той же датой, которую вы использовали для вычисления подписи, фактический заголовок Date: будет проигнорирован, когда подпись будет проверена, и ваш вместо этого будет использоваться альтернативный вариант.

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

+0

Спасибо, Майкл, это переместило меня вперед, так счастлив принять это как ответ. –

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