Firebase Google云存储-用于在bucket中列出和下载对象的签名URL

Firebase Google云存储-用于在bucket中列出和下载对象的签名URL,firebase,google-cloud-platform,firebase-authentication,google-cloud-storage,Firebase,Google Cloud Platform,Firebase Authentication,Google Cloud Storage,我试图给予未经验证的访问权(有时间限制)来列出和下载谷歌存储桶中的对象,并发现签名URL可以做到这一点。但是签名URL适合于单个对象,文档中也提到了这一点 使用签名URL时,请记住以下几点: 签名URL只能用于通过访问云存储资源 XMLAPI端点 签名URL通常可以用于任何XML API请求;然而, Node.js云存储客户端库当前只能 单个对象的签名URL。例如,它不能用于 创建签名URL以列出bucket中的对象 在Node.js、Python、Java或任何其他客户端库中,或者通过手动创建

我试图给予未经验证的访问权(有时间限制)来列出和下载谷歌存储桶中的对象,并发现签名URL可以做到这一点。但是签名URL适合于单个对象,文档中也提到了这一点

使用签名URL时,请记住以下几点:

签名URL只能用于通过访问云存储资源 XMLAPI端点

签名URL通常可以用于任何XML API请求;然而, Node.js云存储客户端库当前只能 单个对象的签名URL。例如,它不能用于 创建签名URL以列出bucket中的对象

在Node.js、Python、Java或任何其他客户端库中,或者通过手动创建签名URL,我可以在其中与用户共享链接,以便他们可以浏览bucket并下载所需的对象,有什么方法吗


谢谢

简单的答案不是

但我可以解释原因。事实上,你必须理解为什么签名的URL是伟大和有用的

我举个例子。您有一个1Tb的文件,请求者想要下载它。您有两种解决方案

  • 在服务器上本地下载文件,然后让用户从服务器下载文件
  • 让用户直接从原始位置(云存储)下载文件

在第一个解决方案中,用户已经在服务器上进行了身份验证,并且很容易让他们安全地下载文件。但是,在用户下载之前,您需要一个巨大的临时存储器来临时存储文件

在第二个解决方案中,没有存储问题(因此也适用于无服务器解决方案、云运行、云功能和应用程序引擎),但您需要授权下载文件:这是签名URL的目的


现在,回到您的用例:您想要委派文件列表特性。为什么?因为你有存储问题?性能问题?还是为了方便

由于此解决方案解决不了任何问题,因此尚未实施。因此,您需要直接从服务器提供文件列表,然后在用户选择了所需文件的情况下,使用签名URL委托下载


编辑1

你需要有一个谷歌身份(用户帐户或服务帐户)才能被IAM服务授权访问你的bucket信息

但是,如果你有一个非谷歌管理的身份令牌,你可以使用一个新功能。你有用处

其思路如下:

  • 配置提供程序以从您拥有的标识令牌中提取正确的数据
  • 配置标识令牌声明和要模拟的服务帐户之间的映射
  • 模拟服务帐户,从中生成访问令牌,然后使用此令牌访问服务帐户上授予的所有API

我不觉得这个功能很好用,但它非常适合你的要求

您不能为此使用已签名的URL。您可以为用户的帐户授予bucket的实际权限,但使用a将其设置为临时权限,如。

感谢您的回答,这是有道理的,但根据文档,它在Node.js中不可用“Node.js云存储客户端库目前只能为单个对象创建签名URL。例如,它不能用于生成已签名的URL以列出bucket中的对象。”“是这样吗?此功能在Python中可用吗?不,此功能在任何语言中都不可用。别找了!!再次感谢!我可以给非谷歌管理的账户bucket访问权限吗?或者我可以将Firebase用户添加到有权访问bucket的用户列表中吗?我提出了一个新的Google云功能我可以让非Google托管帐户访问bucket吗?或者我可以将Firebase用户添加到有权访问bucket的用户列表中吗?此方法需要实际的google帐户。这包括服务帐户,因此您可以创建一个服务帐户,为其提供过期访问权限,并允许其使用其身份验证。但是,这种方法无法很好地扩展,因为您无法创建无限的服务帐户。