2

I have a GAE application with a database of users.

When one of the user tries to download, say, file myapplication.appspot.com/somefile.jpg, I would:

  1. check on the GAE database whether he is allowed to
  2. if he is allowed, redirect him to a cloud storage bucket of mine from where he can download somefile.jpg
  3. if he is not allowed, return him a 404 error code, and do some magic so that directly trying to download somefile.jpg from the cloud storage bucket does not complete.

Now what’s unclear to me is how to control access to somefile.jpg. How can I restrict the download to this scope of users?

PS: using something else than Google Storage is not an option (for those of you guys who thought about blobstore).

4

2 回答 2

4

您不需要限制每个用户基本的访问权限,您可以限制每个应用程序(Google App Engine 应用程序)的访问权限。
每个应用程序都有一个服务帐户,您可以在存储桶上设置一个 ACL 以允许访问应用程序服务帐户。

现在您只需要编写一个处理程序来访问 Google 存储并将数据返回给用户。

于 2012-02-15T15:47:03.607 回答
3

正如 Shay 所指出的,每个 App Engine 应用程序都会自动关联一个内部帐户,称为“服务帐户”。通常,服务帐户名称遵循“your-app-id@appspot.gserviceaccount.com”模式,但是,您可以通过访问App Engine 管理控制台来确认确切名称,然后单击您的应用名称,然后单击“应用程序设置”链接,此时您应该会看到您的服务帐户名称。

找到您的服务帐户名称后,将其添加到具有“可以编辑”权限的API 控制台上的“团队”子页面。这比更新存储桶 ACL 更容易,因为您不必更改任何 ACL,但是请记住,这适用于您项目中的所有存储桶。如果您想将您的应用程序限制为只能访问您的项目所拥有的存储桶的子集,那么您需要按照 Shay 的建议更新每个存储桶的 ACL。

于 2012-02-15T23:51:32.840 回答