在我阅读与Amazon S3
的互动时,我发现Amazon AWS
的请求身份验证是以两种方式完成的
问题是在哪种情况下我更喜欢一种方法而不是另一种方法。这两种认证方法有各自的优缺点吗?作为开发人员,通过使用query string parameters
方法,我可以设置URL,使最终用户能够通过在Web浏览器中输入预先签名的URL来临时访问Amazon S3
资源。我可以使用HTTP Authorization
方法来实现同样的目的吗?如果是这样,哪种方法更好用,各自有哪些限制?
答案 0 :(得分:3)
我可以使用HTTP授权方法来实现同样的目的吗?
有时。关键的区别在于,作为开发人员,您始终无法控制用户代理以注入标头。最明显的例子是Web浏览器响应用户点击链接而发起的简单GET
请求。在这种情况下,您无法为浏览器注入Authorization:
标头以进行发送......因此您只需预先签署该网址即可。
重要的是,签名网址中没有任何被视为敏感信息的信息,因此没有特别强烈的动机来使用标头而不是签名网址。您的AWS访问密钥ID不是秘密,您的AWS秘密不能在计算上可行的时间范围内从其他元素和签名派生,特别是如果您使用签名版本4,您应该这样做。签名版本2在旧区域并未正式弃用,但较新的S3从未支持过它,可能永远不会支持它。
当您控制用户代理时,例如在后端服务器代码中,添加标头可能更为可取,因为您不需要对现有的URL字符串进行任何操作。
答案 1 :(得分:1)
first AWS page中的概述说明了区别:
除 POST请求和使用查询参数签名的请求外,所有Amazon S3存储分区操作和对象操作都使用授权请求标头提供身份验证信息。
基本上POST
用于HTML forms(在Mozilla页面中详细讨论)。每当请求涉及将数据传递到远程服务器时,您都会使用表单,而不仅仅是检查状态。如 HTML method Attribute (W3Schools)中所述,
切勿使用
GET
发送敏感数据! (将在URL中显示)
区别于POST
:
将表单数据附加到HTTP请求的正文中(数据未显示在URL中)