【问题标题】:PUT Presigned URL expires before download of file completesPUT Presigned URL 在文件下载完成之前过期
【发布时间】:2021-09-06 04:56:16
【问题描述】:

有点奇怪的情况是,我的 API 被发送一个预签名的 URL 来写入,以及一个预签名的 URL 来下载文件。

问题是,如果他们发送一个非常大的文件,我们需要写入的预签名 URL 可能会在它到达该步骤之前过期(一些处理发生在读/写之间)。

是否可以“打开”连接以提前写入以确保它不会过期,然后在较早的过程完成后开始写入?或者也许有更好的方法来处理这个问题。

顺序如下:

  1. 接收带有 downloadUrl 和 uploadUrl 的 API 请求
  2. 下载文件
  3. 处理文件
  4. 上传文件到uploadUrl

TL;DR:如何确保 #4 的 url 在我到达它之前不会过期?

【问题讨论】:

  • 您可以延长预签名网址的生命周期,它目前有效多长时间?
  • 问题是我们被发送了 presignedUrl,所以我们无法控制它(或者它要进入的存储桶)。我们的 API 基本上是用来为他们做一些花哨的处理。我们计划要求他们慷慨地度过一生以确保安全,但我一直在寻找是否有更有保障的选择。
  • 这里唯一的保证要求提供商增强您可用的选项。它们要么延长时间限制,要么为您提供单独的 API 来获取下载和上传 URL。

标签: amazon-web-services amazon-s3 file-upload pre-signed-url


【解决方案1】:

生成预签名 URL 时,您可以完全控制持续时间。例如,这段 Java 代码展示了如何在创建 GetObjectPresignRequest 对象时设置时间:

 GetObjectPresignRequest getObjectPresignRequest =  GetObjectPresignRequest.builder()
                            .signatureDuration(Duration.ofMinutes(10))
                            .getObjectRequest(getObjectRequest)
                            .build();

所以你可以在这种情况下增加时间限制。

【讨论】:

  • 问题是我们被发送预签名 URL 并且无法控制那个时间。现在我们只是要求他们对写入 url 的到期给予慷慨,但我正在寻找一个更有保障的解决方案,如果存在的话。
  • 唯一的解决方案是在创建 GetObjectPresignRequest 对象时设置值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
相关资源
最近更新 更多