从Web应用程序访问Google云端存储,始终是

时间:2016-12-12 23:50:42

标签: google-app-engine web-applications google-cloud-storage

我正在使用Web应用程序作为Google云端存储(GCS)的界面。

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

我不确定GCS身份验证如何在场景后工作,以及是否可以直接授予对Web应用程序的访问权限。我不知道如何通过http请求附加应用程序身份验证信息。我所知道的是我可以通过后端服务做到这一点,但出于简单的原因,我想知道是否有可能解决这个问题。我试过的一件事是将Web应用程序域(将通过http请求中的referrer发送)添加到该存储桶的ACL中,这根本不起作用。

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

====

解决方案

我最终使用了在5分钟后过期的signedUrl,我强烈建议使用 gcloud 与gcs进行互动(他们的python document非常好)。再次感谢您的全面解答!

1 个答案:

答案 0 :(得分:2)

您在网络浏览器上有一个用户想要下载只有您应用程序的服务帐户具有读访问权限的对象。您有几个选择:

  1. 展开访问权限:使这些对象公开可读。如果此信息敏感,可能不是最佳选择,但如果不是,则这是最简单的解决方案。
  2. 将您应用的凭据提供给用户,以便他们可以作为您的应用进行身份验证。这是一个非常糟糕的主意,我可能不应该在这里列出它。
  3. 当用户想要下载文件时,让他们向您的应用询问它,然后让您的应用获取该文件并将其内容流式传输给用户。这是客户端代码最简单的解决方案,但它使您的应用程序负责流文件内容,这不是很好。
  4. 当用户想要下载文件时,让他们向您的应用询问是否允许,并使用某种令牌回复他们,他们可以使用这些令牌直接从GCS获取数据。
  5. #4就是你想要的。您的用户会向您的应用程序询问文件,您的应用程序将决定是否允许他们通过您正在进行的操作访问该文件(密码?IP检查?Cookie?无论如何。)然后,您的应用将使用用户的URL进行响应可以用来直接从GCS获取文件。

    此网址称为“已签名的网址”。您的应用程序使用自己的私钥向U​​RL添加签名,该URL指示持有者可以下载哪个对象,并且URL很长。 procedure for signing URLs有点棘手,但幸运的是gcloud存储库have helper functions可以生成它们。