HTTP Authorization标头和Query字符串参数之间的区别

时间:2015-05-15 23:49:38

标签: authentication amazon-web-services amazon-s3 httprequest pre-signed-url

在我阅读与Amazon S3的互动时,我发现Amazon AWS的请求身份验证是以两种方式完成的

  1. HTTP Authorization: 使用HTTP Authorization标头是提供身份验证信息的最常用方法
  2. Query string parameters: 当您想要完全在URL中表达请求时,使用查询参数来验证请求非常有用。此方法也称为预设URL。
  3. 问题是在哪种情况下我更喜欢一种方法而不是另一种方法。这两种认证方法有各自的优缺点吗?作为开发人员,通过使用query string parameters方法,我可以设置URL,使最终用户能够通过在Web浏览器中输入预先签名的URL来临时访问Amazon S3资源。我可以使用HTTP Authorization方法来实现同样的目的吗?如果是这样,哪种方法更好用,各自有哪些限制?

2 个答案:

答案 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中)