Authentication HTTP授权标头和查询字符串参数之间的差异

Authentication HTTP授权标头和查询字符串参数之间的差异,authentication,amazon-web-services,amazon-s3,httprequest,pre-signed-url,Authentication,Amazon Web Services,Amazon S3,Httprequest,Pre Signed Url,当我读到与amazons3的交互时,我了解到与amazonaws的请求身份验证是通过两种方式完成的 : 使用HTTP授权头是提供身份验证信息的最常用方法 : 当您希望在URL中完全表达请求时,使用查询参数对请求进行身份验证非常有用。此方法也称为预先指定URL 问题是在哪种情况下我应该选择一种方法而不是另一种。这两种身份验证方法各有优缺点吗?作为开发人员,通过使用查询字符串参数方法,我可以预先设计URL,最终用户可以通过在web浏览器中输入预先设计的URL临时访问Amazon S3资源。我可以使用

当我读到与
amazons3
的交互时,我了解到与
amazonaws
的请求身份验证是通过两种方式完成的

  • : 使用HTTP授权头是提供身份验证信息的最常用方法
  • : 当您希望在URL中完全表达请求时,使用查询参数对请求进行身份验证非常有用。此方法也称为预先指定URL
  • 问题是在哪种情况下我应该选择一种方法而不是另一种。这两种身份验证方法各有优缺点吗?作为开发人员,通过使用
    查询字符串参数
    方法,我可以预先设计URL,最终用户可以通过在web浏览器中输入预先设计的URL临时访问
    Amazon S3
    资源。我可以使用
    HTTP授权
    方法来实现同样的功能吗?如果是这样,使用哪种方法更好?它们各自的局限性是什么?

    中的概述说明了区别:

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

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

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

    POST
    不同:

    在HTTP请求主体内追加表单数据(URL中未显示数据)

    我可以使用HTTP授权方法来实现同样的事情吗

    有时候。关键的区别在于,作为一名开发人员,您并不总是对用户代理有足够的控制权来注入头。最明显的例子是一个简单的
    GET
    请求,由web浏览器响应用户单击链接而启动。在这种情况下,您无法为浏览器插入
    授权:
    头以发送。。。因此,对URL进行预签名是您所能做的一切

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


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

    我看过Amazon Cognito,我认为它将用一种新机制替换查询字符串参数。我可能错了,但我不这么认为。。。据我所知,cognito生成临时访问密钥和机密,这些密钥和机密与普通凭证一样工作,并添加了一个安全令牌。