我的任务是与Amazon Gift Codes On Demand (AGCOD) RESTful API集成。我们需要使用Signature Version 4来签署我们的请求,这些请求是由AWS SDK for .NET针对其他服务执行的,而不是AGCOD。
我使用HttpClient命名空间中的System.Net.Http类与AWS的API进行通信。这反过来又使用HttpClientHandler来创建HttpRequestMessage。这样做会将> xpathApply(doc, "/ns:event_list/ns:event", xmlGetAttr , "matchid", namespaces = ns)
[[1]]
[1] "269679"
[[2]]
[1] "269679"
,Host
和Content-Length
等额外标题添加到邮件中。
我的问题是,在我调用PostAsync并添加了标题之后,如何在将其发送到服务器以便我可以计算并添加签名之前,如何检查邮件?
我显然可以简单地自己指定这些标题。但这只对已知的标题有帮助。如果使用了不同的HttpMessageHandler(例如WebRequestHandler),则可以添加不同的标头(例如Connection
和Content-Encoding
)。如果我不知道邮件中的所有标题,我将无法计算正确的签名。
答案 0 :(得分:2)
大多数(可能是所有)AWS服务实际上并不要求您包含所有标头。亚马逊显然预计这会有问题,正如你提到的那样。
规范标头包含作为AWS请求一部分的所有HTTP标头的列表。您必须至少包含主机标头,并且不同的服务可能需要其他标头。 [强调补充]
http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
通常,您需要添加的标头是您在应用程序级别已经了解的标头,例如任何特定于服务的x-amz-*
标头。您不必担心包含的标题示例包括User-Agent:
。 http客户端库经常添加的一个标头是Date:
标头,但如果您包含格式正确的x-amz-date:
标头,其标题与您用于计算签名的日期相同,则实际为Date:
验证签名时将忽略标题,而是使用您的备用标记。
我意识到这并没有直接回答你的问题,但我怀疑你预期需要做的事情可能是乏味或不切实际的,所以我认为这些信息值得一提。