使用预签名 URL 进行 AWS S3 身份验证的用户访问?

Zug*_*dud 4 javascript amazon-s3 amazon-web-services pre-signed-url

我想在私有 AWS S3 存储桶上托管文件,只有通过我的 Web 应用程序身份验证的用户才能访问该存储桶。这些文件下载的链接必须是静态的。

简单的代理方法:

我知道这可以使用代理服务来完成。在这种情况下,静态链接将指向该服务,并且该服务将处理请求用户会话的验证,如果它有效,该服务将使用来自 S3 的文件内容进行响应。

预签名 URL 代理方法:

但是,与其实施代理来控制对文件的访问,我想知道是否可以以某种方式使用预先签名的 URL?

https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

在这种情况下,代理的作用只是向用户返回一个预先签名的 URL,而不是来自 S3 的文件的实际负载。然后,最终用户可以使用这个预先签名的 URL 直接从 S3 下载文件。我不清楚的是如何在浏览器中管理此流程,我假设我需要将 JavaScript 编写为以下内容:

  1. 从代理服务请求预签名 URL
  2. 等待回应
  3. 使用响应中提供的预签名 URL(预签名 URL)下载实际文件

我在正确的轨道上吗?

dec*_*eze 5

只需将 307 重定向从您的服务器返回到预先签名的 URL。例如客户端请求:

GET /the/file HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

服务器生成一个预先签名的 URL 并响应:

HTTP/1.1 307 Temporary Redirect
Location: https://s3.aws..../the/file?...
Run Code Online (Sandbox Code Playgroud)