Backblaze B2 下载 "presigned URL"

Backblaze B2 download with "presigned URL"

情况:我在网络上 运行 一个 Django 应用程序,登录用户也可以在其中下载 .pdf 文件(非 public,具有特定限制,具体取决于用户权限)。最方便的方法(例如在 S3 中)是使用有时间限制的预签名 URL,因为它们会立即在浏览器中打开,而且应用服务器不必处理额外的流量。

问题:显然 Backblaze B2 没有提供明确的方法来创建预签名 URLs 以直接在浏览器中下载非 public 文件。 生成 api URL 和授权令牌,并从对象存储中获取文件发生在应用程序服务器级别,并且该过程不会暴露给 "ordinary" 用户。

但最终,API 操作 "b2_download_file_by_name" 仅使用 GET 请求,这意味着我可以使用 "?Authorization=123xyz 将授权令牌添加到请求的 URL …………”。通过这种方式,我得到了一个预签名的 URL,它在浏览器中工作得很好,允许在有限的时间内访问特定的非 public 文件。 (请注意:B2 下载可以限制为具有特定前缀的文件 [如 s3 伪文件夹],但如果指定的 "prefix" 足够长,我可以为一个文件指定特定的身份验证令牌。)

问题:正如我上面所写,授权令牌通常不会暴露给用户。现在,如果我让 URL 可见,这是否意味着存在安全风险?换句话说,拥有一个或多个令牌的用户是否可以从令牌中提取通用访问密钥,或者令牌是否加密得足够好以避免这种情况?

根据 b2_download_file_by_name 调用的文档,您可以按照您描述的方式在 URL 中使用下载授权。

可以在 URL 查询字符串中提供授权令牌,而不是在 HTTP header 中传递。从 b2_authorize_account 获得的帐户授权令牌将允许访问私有存储桶中的所有文件。从 b2_get_download_authorization 获得的下载授权令牌将允许访问名称以用于生成下载授权令牌的文件名前缀开头的文件。

然而,b2_get_download_authorization 调用中设置的到期时间似乎被忽略了,因此生成的 URL 永远不会过期,这当然是不安全的。我有 B2 的支持票,所以希望得到解决方案。