java - 如何授予经过身份验证的网站用户(App Engine 标准)访问 Google Cloud Storage 存储桶的权限?

标签 java google-app-engine google-cloud-platform google-signin

我已经在 Google App Engine 标准上部署了一个 java8 Web 应用程序。目前我有 Oauth2 集成,我能够获取用户的电子邮件地址、token_id 等。用户注册流程非常标准(即使使用 Oauth2)。它基本上是让用户添加他们的电子邮件/密码或使用 Google 登录进行注册。 我在 Google Cloud Storage 中有目录和文件,我希望允许“经过身份验证的”用户访问它们。 这意味着:

  • a) 如果他们的用户名/密码与我在 mysql 数据库中的用户名/密码匹配 或
  • b) 如果我在数据库中找到他们的 Google 登录凭据

我将它们重定向到 servlet,该 servlet 以链接的形式显示安全网页中的所有文件,用户可以在其中单击/打开文档。 我清楚如何请求对用户可能拥有的 Google 资源的授权。我需要知道的是如何“授予”用户(Google 用户或在网站上注册的普通用户)对 Google Cloud Storage 存储桶中文件的访问权限?

除非我将存储对象读取器授予“所有用户”,否则我会得到:

<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
Anonymous caller does not have storage.objects.get access to drmath.appspot.com/1a/index.html.
</Details>
</Error>

最佳答案

Google OAuth 无法满足您授予 Google Cloud Storage 访问权限的要求。他们的电子邮件地址(用户身份)需要作为用户添加到您的 Google Cloud IAM。

您可以做的是生成签名网址。这些是临时访问超时的 URL。您的后端服务器代码将生成 URL,然后用户可以暂时直接访问云存储对象。

您的后端将确定用户是否通过您想要的任何方法进行授权,包括使用 OAuth、数据库等。

Generating Signed URLs with Your Own Program

Signed URLs

关于java - 如何授予经过身份验证的网站用户(App Engine 标准)访问 Google Cloud Storage 存储桶的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53827552/

相关文章:

java - 清除应用程序默认值

c# - asp C# 应用程序默认凭据不可用

python - 在使用 Google App Engine 和 ndb 时看到过重复的 ID 吗?

ios - 将数据从 iOS 推送到 Google Cloud BigQuery

google-cloud-platform - 在本地运行 Vertex AI 两塔模型

java - java中的对象不断更新循环对象

java - Google Http 删除正文 (Json)

java - Spring 批处理元素分割器

python - 部署应用引擎应用程序时如何处理敏感的配置信息?

android - Eclipse 启动挂起, "Android SDK: resolving error markers"