AWS API 使用 Javascript 签署的 POST 请求

AWS API signed POST request with Javascript

本文关键字:POST 请求 签署 Javascript API 使用 AWS      更新时间:2023-09-26

我想做什么:最终:我想从浏览器扩展程序(Safari、Chrome)填充 AWS Kinesis 流。我需要使用签名流程 (v4) 将请求发送到 AWS;这涉及设置标头并加密它们(在具有 AWS 私有密钥的远程服务器上),以最终将这些标头加入请求。

亚马逊请求显式定义标头"主机"...但是Javascript严格禁止设置它(以及一堆其他的,有充分的理由)

一定错过了什么——我该怎么做?

来源:http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html - 该示例在 Python 中,但它显示了他们打算如何使用 Host 标头的服务器端

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

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

当您执行 JS XHR 本身时,Host: 标头由给定的 URL 填充和解析,与 curl 相同,例如

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

。将自动添加标题Host: example.org...

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