HTTP授权头和查询字符串参数之间的区别

6
当我在阅读关于与Amazon S3交互的内容时,我了解到Amazon AWS的请求认证有两种方法:
  1. HTTP Authorization: 使用HTTP授权标头是提供身份验证信息最常见的方法。
  2. Query string parameters: 使用查询参数来认证请求在完全以URL方式表达时很有用。这种方法也被称为预签名URL。
问题是在什么情况下应该优先选择一种方法。这两种身份验证方法是否各自具有优缺点?作为开发人员,通过使用查询字符串参数方法,我可以预签名URL,从而使最终用户可以通过在Web浏览器中输入预签名URL来临时访问Amazon S3资源。我可以使用HTTP授权方法来实现同样的功能吗?如果可以,哪种方法更好,并且它们各自的限制是什么?
2个回答

4
我能用HTTP授权方法实现同样的事情吗? 有时候可以。关键区别在于作为开发人员,您并不能总是控制用户代理程序以注入标头。最明显的例子是Web浏览器响应用户单击链接而发出的简单GET请求。在这种情况下,您无法注入Authorization:标头供浏览器发送...因此预签名URL是您所能做的唯一操作。
重要的是,在已签名的URL中没有被认为是敏感的信息,因此没有特别强烈的动机使用标头而不是已签名的URL。您的AWS访问密钥ID不是机密,而您的AWS Secret无法从其他元素和签名中导出,并且在可行的时间范围内尤其是如果您使用应该使用Signature Version 4, Signature Version 2在旧版本中未正式停用,但新版S3从不支持它,也很可能永远不会支持。
当您控制用户代理程序时,例如在后端服务器代码中,添加标头可能更可取,因为您不需要对手头的URL字符串进行任何操作。

我已经看到了亚马逊 Cognito,我认为它将通过一种新的机制来取代查询字符串参数。 - Prudhvi
我可能错了,但我不认为是这样的...据我所知,Cognito会生成临时访问密钥和秘钥,其工作方式类似于普通凭证,但还带有安全令牌。 - Michael - sqlbot

1

第一个 AWS 页面中的概述说明了它们之间的区别:

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

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

永远不要使用GET发送敏感数据!(会在URL中显示)

POST相区别:

在HTTP请求的主体中添加表单数据(数据不会显示在URL中)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接