5

当我阅读有关与交互的信息时Amazon S3,我开始知道请求身份验证以Amazon AWS两种方式完成

  1. HTTP 授权:使用 HTTP 授权标头是提供身份验证信息的最常用方法
  2. 查询字符串参数:当您想完全在 URL 中表达请求时,使用查询参数对请求进行身份验证非常有用。此方法也称为预签名 URL。

问题是在哪种情况下我应该更喜欢一种方法而不是另一种方法。这两种认证方式有各自的优缺点吗?作为开发人员,通过使用query string parameters方法,我可以预签名 URL,使最终用户可以Amazon S3通过在 Web 浏览器中输入预签名 URL 来临时访问资源。我可以使用HTTP Authorization方法来实现相同的目标吗?如果是这样,哪种方法更好用,它们各自的局限性是什么?

4

2 回答 2

4

我可以使用 HTTP 授权方法来实现相同的目的吗?

有时。关键区别在于,作为开发人员,您并不总是对用户代理有足够的控制权来注入标头。最明显的例子是GETWeb 浏览器响应用户单击链接而发起的简单请求。在这种情况下,您无法Authorization:为浏览器注入标头以发送......所以您可以做的就是预先签署 URL。

重要的是,签名 URL 中没有被认为敏感的信息,因此没有特别强烈的动机使用标头而不是签名 URL。您的 AWS 访问密钥 ID 不是机密,并且您的 AWS 机密不能在计算可行的时间范围内从其他元素和签名派生,尤其是在您使用签名版本 4 时,您应该这样做。Signature Version 2 并未在旧地区正式弃用,但较新的 S3 从未支持它并且可能永远不会支持。

当您控制用户代理时,例如在后端服务器代码中,添加标头可能更可取,因为您不需要对已有的 URL 字符串进行任何操作。

于 2015-05-17T00:37:08.027 回答
1

第一个 AWS 页面中的概述说明了不同之处:

除了POST 请求使用查询参数签名的请求外,所有 Amazon S3 存储桶操作和对象操作都使用 Authorization 请求标头来提供身份验证信息。

基本上 aPOST用于HTML表单(在 Mozilla 页面中有详细讨论)。每当请求涉及将数据传递到远程服务器时,您都将使用表单,而不仅仅是检查状态。如HTML 方法属性(W3Schools) 中所述,

切勿用于GET发送敏感数据!(将在 URL 中可见)

区别于POST

在 HTTP 请求的正文中附加 form-data(数据未显示在 URL 中)

于 2015-05-16T19:01:34.250 回答