【问题标题】:AWS API signed POST request with JavascriptAWS API 使用 Javascript 签名的 POST 请求
【发布时间】:2015-04-04 07:00:43
【问题描述】:

我正在尝试做的事情: 最终:我想从浏览器扩展(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 和查询字符串的 cmets 也提到了“主机”:它必须作为请求中的标头存在

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

【问题讨论】:

  • 您可能需要查看 AWS 开发工具包 (docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/…),以便更轻松地使用 AWS 服务和 Kinesis。
  • 谢谢@Guy 我实际上不能使用 sdk,因为后端在 Parse.com 上运行,所以我不得不从头开始构建。
  • 你怎么能设法将文件上传到 s3 而不在标题中提及“主机”?

标签: javascript amazon-web-services http-headers xmlhttprequest amazon-kinesis


【解决方案1】:

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

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

...会自动添加标题Host: example.org...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2021-10-13
    • 2019-01-12
    • 1970-01-01
    • 2019-04-16
    • 2016-11-28
    • 2016-03-16
    相关资源
    最近更新 更多