AWS API 与 Javascript 签署了 POST 请求

AWS API signed POST request with Javascript

我正在尝试做的事情: 最终:我想从浏览器扩展(Safari,Chrome)填充 AWS Kinesis 流。 我需要使用签名过程 (v4) 将请求发送到 AWS;这涉及设置 headers 并加密它们(在具有 aws 密钥的远程服务器上)以最终将它们加入请求。

亚马逊要求明确定义 header "Host"… 然而 Javascript 严格禁止设置它(以及其他一些,有充分的理由)

我一定是遗漏了什么——我该怎么做?

来源: http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html - 该示例在 Python 中,但它显示了 server-side 他们打算如何使用主机 header

注意:我目前正在使用 POST;该示例描述 GET 和查询字符串的注释也提到了 "Host":它必须作为 header 存在于请求

另外:使用类似的设置,我设法将文件从客户端直接上传到 S3 存储桶——自动化过程略有不同('Host' 没有要求)。

Host: header 由 JS XHR 本身在执行时从给定的 URL 填充和解析,与 curl 相同,例如

curl -v -X POST http://example.org/foo

...将自动添加 header Host: example.org...

对于 AWS,您仍然需要将其添加到 canonical_headers 列表中以进行签名(并且全部小写),如链接示例中所述。不过那部分与实际建立连接无关。