情况:我在网络上运行一个 Django 应用程序,登录用户也可以在其中下载 .pdf 文件(非公开,有特定限制,取决于用户权限)。最方便的方法(例如在 S3 中)是使用有时间限制的预签名 URL,因为它们会立即在浏览器中打开,而且应用服务器不必处理额外的流量。
问题:Backblaze B2 显然没有提供一个明确的方法来创建预签名 URL 以直接在浏览器中下载非公共文件。生成 api URL 和授权令牌,并从对象存储中获取文件发生在应用服务器级别,并且该过程不会暴露给“普通”用户。
但最后,API 操作“b2_download_file_by_name”只使用了一个 GET 请求,这意味着我可以使用“?Authorization=123xyz........”将授权令牌添加到请求的 URL 中。通过这种方式,我获得了一个在浏览器中运行良好的预签名 URL,以允许在有限的时间内访问特定的非公共文件。(请注意:B2 下载可以限制为具有特定前缀的文件 [如 s3 伪文件夹],但如果指定的“前缀”足够长,我可以使身份验证令牌特定于一个文件。)
问题:正如我上面写的,通常授权令牌不会暴露给用户。现在,如果我让 URL 可见,这是否意味着安全风险?换句话说,拥有一个或多个令牌的用户是否可以从令牌中提取通用访问密钥,或者令牌是否加密得足以避免这种情况?