ReactJS-在重定向前删除 HTTP 标头

Vin*_*nie 8 rest amazon-web-services reactjs

在我的 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.
Run Code Online (Sandbox Code Playgroud)

有没有办法Authorization在重定向之前删除标题?

这似乎应该是一种相当普遍的情况(当 React 应用程序需要访问受保护的 S3 资产时)——有没有更好的方法来处理这个用例?

Vin*_*nie 6

在与 Amazon 支持人员进行多次对话后,实现上述目标的方法是在 S3 上使用 CloudFront 发行版。CloudFront 没有与 S3 相同的限制Only one auth mechanism allowed

这就是我所做的:

  • 创建具有 S3 源的 CloudFront 分配。
    • 可选选择 - 限制存储桶访问。
    • 您需要一个 CloudFront 访问身份(使用现有的或创建新的)。
    • 推荐选择-更新存储桶策略
  • 在S3中
    • 确保存储桶策略已更新(在上面选择“更新存储桶策略”时自动填充)
    • 使用您需要支持的方法/标头更新 CORS 配置

您需要的另一件事是此处描述的 CloudFront 密钥对,然后在生成预签名链接时使用该信息。

更多信息

亚马逊确实让这件事变得比实际需要的复杂得多(即为什么对Only one auth mechanism allowedS3 有限制?),但至少为那些需要它的人提供了一个解决方法。

  • 这似乎是一个非常尴尬的修复,这意味着您仍在将身份验证令牌发送给第三方。我也无法找到直接的客户端解决方案。接下来我可能会尝试在 JS 中手动处理重定向... (2认同)