当前位置: 首页 > 知识库问答 >
问题:

从Web应用程序访问谷歌云存储,总是403

欧阳昊焱
2023-03-14

我正在开发一个web应用程序,作为与Google云存储(GCS)的接口。

我正在使用后端服务来检索我存储在GCS上的文件列表及其使用JSON API的URL,并将其返回到我的Web应用程序。然而,我真的无法通过这些URL加载文件,总是返回403禁止。

我不确定GCS身份验证在幕后是如何工作的,也不确定是否可以直接授予对网络应用程序的访问权限。我不确定如何通过超文本传输协议请求附加应用程序鉴别信息。我所知道的是,我可以通过后端服务做到这一点,但出于简单的原因,我想知道是否有可能绕过它。我尝试的一件事是将网络应用程序域(将通过超文本传输协议请求中的引用器发送)添加到ACL中,这根本不起作用。

感谢@Brandon在下面指出的。我可以授权任何有权访问该应用程序的人查看GCS的内容,因为它是一个内部应用程序,我在第一次为web应用程序提供服务时已经检查了他们的身份验证。

====

解决方案

我最终使用了5分钟后到期的signedUrl,我强烈建议使用gCloud与gcs交互(他们的python文档真的很好)。再次感谢彻底的回答!

共有1个答案

俞俊逸
2023-03-14

您的web浏览器上有一个用户希望下载一个只有应用程序的服务帐户具有读取权限的对象。您有几个选择:

  1. 扩展访问:使这些对象公开可读。如果此信息敏感,可能不是最佳选择,但如果不是,这是最简单的解决方案
  2. 将你的应用的凭据提供给用户,以便他们可以作为你的应用进行身份验证。这是一个非常糟糕的主意,我甚至不应该在这里列出它
  3. 当用户想要下载文件时,让他们向你的应用程序索要文件,然后让你的应用程序获取文件并将其内容流式传输给用户。这是客户端代码最简单的解决方案,但它让你的应用程序负责流式传输文件内容,这并不是很好
  4. 当用户想要下载文件时,让他们向你的应用程序请求许可,然后用某种令牌回复他们,他们可以使用令牌直接从GCS获取数据

#4是你想要的。您的用户会要求您的应用程序提供一个文件,您的应用程序将决定是否允许他们通过您正在做的任何事情访问该文件(密码?IP检查?饼干?随便吧。)然后,您的应用程序将响应一个URL,用户可以使用该URL直接从GCS获取文件。

此URL称为"签名URL"。您的应用程序使用自己的私钥向URL添加签名,该签名指示承载可以下载哪个对象,并且该URL长期有效。为URL签名的过程有些棘手,但幸运的是,gCloud存储库有帮助函数可以生成它们。

 类似资料: