在我的React应用程序中,我正在对端点进行GET
REST Web服务调用,其目的是为受保护的S3资产生成预先签名的AWS URL。我们将Authorization
标头和令牌传递给服务。
此初始调用按预期工作,服务使用重定向(通过307响应代码)进行响应,并在响应的Location
标头中包含预签名URL。
我面临的问题是,当遵循重定向时,亚马逊拒绝使用400响应代码和以下消息进行呼叫。
Only one auth mechanism allowed; only the X-Amz-Algorithm query parameter, Signature query string parameter or the Authorization header should be specified.
在遵循重定向之前,有没有办法删除Authorization
标题?
这似乎应该是一种相当常见的情况(当React应用程序需要访问受保护的S3资产时) - 有更好的方法来处理这个用例吗?
答案 0 :(得分:1)
在与Amazon支持人员进行了数次对话之后,实现上述目标的方法是使用CloudFront发行版来推广S3。 CloudFront与使用Only one auth mechanism allowed
这就是我所做的:
您需要的另一件事是here中所述的CloudFront密钥对,然后在generating the presigned link时使用该信息。
更多信息
Amazon肯定使事情变得复杂得多(例如,为什么对S3完全有Only one auth mechanism allowed
限制?),但至少有一种解决方法。