【问题标题】:Authorization header when following redirects跟随重定向时的授权标头
【发布时间】:2020-11-28 06:23:15
【问题描述】:

在 Chrome、IE 和 Firefox 中跟踪 303 响应的重定向时,会包含 Authorization 标头。
当对内部服务的请求在 Location 标头中使用签名的 S3 URL 进行响应时,就会出现问题。
S3 将响应 400 响应,并且无法确定要使用哪种身份验证方法。

请求内部服务

GET INTERNAL_SERVICE HTTP/1.1
Pragma: no-cache
Origin: https://example.com
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,da;q=0.7,de;q=0.6
Authorization: Bearer g6YQjOy3BDu32es8xKdMRNpcQ2Fkrh5NG7y5fDs5
Accept: application/json, text/plain, */*
Cache-Control: no-cache
Authority: example.com
Host: example.com
Connection: close

回应

HTTP/1.1 303 See Other
Date: Tue, 13 Mar 2018 08:55:12 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Connection: close
Server: nginx
location: S3_SIGNED_URL
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Accept, Authorization, X-                        
Requested-With
Access-Control-Max-Age: 28800

对 S3 的请求

GET S3_SIGNED_URL HTTP/1.1
Pragma: no-cache
Origin: https://example.com
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,da;q=0.7,de;q=0.6
Authorization: Bearer g6YQjOy3BDu32es8xKdMRNpcQ2Fkrh5NG7y5fDs5
Accept: application/json, text/plain, */*
Cache-Control: no-cache
Authority: example.com
Host: BUCKET_NAME.s3.eu-central-1.amazonaws.com
Connection: close

回应

HTTP/1.1 400 Bad Request
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-request-id: REQUEST_ID
x-amz-id-2: AMZ_ID
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Tue, 13 Mar 2018 09:06:41 GMT
Connection: close
Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>
<Error>
   <Code>InvalidArgument</Code>
   <Message>Only one auth mechanism allowed; only the X-Amz-Algorithm     
query parameter, Signature query string parameter or the Authorization 
header should be specified</Message>
   <ArgumentName>Authorization</ArgumentName>
   <ArgumentValue>Bearer g6YQjOy3BDu32es8xKdMRNpcQ2Fkrh5NG7y5fDs5</ArgumentValue>
   <RequestId>REQUEST_ID</RequestId>
   <HostId>HOST_ID</HostId>
</Error>

有没有办法指示浏览器忽略Authorization标头,或者强制S3忽略标头?

【问题讨论】:

  • 如果您使用不同的重定向代码,例如 302 或 307,会怎样?无论如何,浏览器发送一个Authorization 跨域标头似乎是完全错误的......存储桶上是否配置了CORS?
  • 我们已经尝试了 303 和 307 并且这是同一个问题。并且已经配置了CORS
  • 如果启用了 CORS,这是我的下一个想法......即使我最初没有认为,如果你有 &lt;AllowedHeader&gt;Authorization&lt;/AllowedHeader&gt;(或 * ) 在存储桶的 CORS 配置中,可能存在交互。 w3.org/TR/cors/#cors-api-specification-redirect
  • @MortenHauberg 你曾经解决过这个问题吗?我们面临着完全相同的问题。
  • 现在是 2021 年,我仍然找不到这个问题的答案。这是一种非常不安全的设计,将授权标头重定向到跨域资源,并且随着 S3 的使用越来越多,我不断遇到这个问题。

标签: javascript amazon-s3 browser


【解决方案1】:

有点杂乱无章,但可以通过使用 CloudFront 到 S3 前端来解决这种情况。更多信息发布在这里:ReactJS- remove HTTP header before redirect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 2017-06-24
    • 1970-01-01
    • 2020-07-24
    • 2015-04-19
    • 1970-01-01
    • 2019-02-12
    • 2021-02-14
    相关资源
    最近更新 更多