【问题标题】:Why doesn't granting 'allAuthenticatedUsers' member the 'Cloud Functions Invoker' role work for google cloud functions?为什么授予“allAuthenticatedUsers”成员“Cloud Functions Invoker”角色不适用于谷歌云功能?
【发布时间】:2020-02-03 07:40:32
【问题描述】:

根据 Google 文档,“allAuthenticatedUsers”成员将包括经过身份验证的任何人,包括常规 gmail 帐户。所以我给了那个成员“云函数调用者”角色,认为任何经过身份验证的用户都应该能够调用我的谷歌云函数。那是行不通的。我得到以下结果:

错误:禁止您的客户端无权从此服务器获取 URL /function-1。

我已经证明,如果我将“Cloud Functions Invoker”角色授予“allUsers”,则可以调用该函数。所以我知道该功能有效(它是谷歌云创建的默认功能)。

那么为什么不授予“allAuthenticatedUsers”成员“Cloud Functions Invoker”角色对谷歌云功能起作用?我错过了什么?

谢谢

【问题讨论】:

  • 你如何测试这个?您在请求中添加了哪些标头?您的代码/应用程序需要将 HTTP 标头 Authorization: Bearer IDENTITY_TOKEN 添加到请求中。使用发出请求的客户端的代码或使用标头捕获 HTTP 请求来编辑您的问题。
  • 我做了两个测试。第一个使用邮递员,我通过使用我在项目下创建的 oauth 客户端获取访问令牌。令牌作为不记名令牌发送。那没有用。我的第二个测试是简单地转到 chrome,登录到 google,然后调用函数的 URL。我还没有编写客户端代码,因为我无法通过邮递员使其工作。
  • 您使用的两种方法均无效。对于第一种方法,您需要使用身份令牌,您使用了访问令牌。对于第二种方法,Chrome 在调用您的端点时不会添加身份令牌。添加 Authorization 标头是您必须编码并包含在 HTTP 请求中的内容。对于浏览器,这意味着编写 Javascript。请注意我对身份令牌的强调。访问令牌将不起作用。
  • @JohnHanley 非常感谢!有用。我之前尝试身份令牌时一定做错了什么。该令牌现在可能已经过期,这就是我的尝试在 10 分钟前失败的原因。我刚得到一个新令牌,它起作用了 :) 所以这里的关键是使用 id_token 而不是 access_token 非常感谢!
  • @mj21 你能告诉我你是如何获得 ID 令牌的吗?我们正在使用 firebase.auth().currentUser.getIdToken().then(token ... 并将其发送到 Authorization: Bearer {token} 标头中,但仍然出现 403 错误,所以我们最终不得不给出allUsers 的调用者角色:(

标签: google-cloud-platform oauth-2.0 google-cloud-functions


【解决方案1】:

正确答案

这要归功于约翰·汉利。我需要在不记名令牌授权标头中使用 id_token 而不是我的 access_token。

我不确定如何将此问题标记为已回答。我无法接受评论,也无法接受自己的回答。我的目的是通过将此问题标记为已回答来帮助有相同问题的其他人,但我不能这样做。奇怪!

如果可以,请将答案标记为正确。

【讨论】:

    【解决方案2】:

    您不应根据Cloud Functions Docs 在项目级别应用allUsersallAuthenticatedUsers(请参阅“控制对项目中所有功能的访问”中的注释)。您可以尝试将其应用于您要保护的单个功能吗?

    【讨论】:

    • 感谢您的回复。是的,我在功能级别而不是项目级别应用它。但这不起作用。
    【解决方案3】:

    您可以将此角色应用于单个函数。

    如果您想保护项目中的所有资源,我的意思是,如果您不想让 allUsers 使用 GCP 资源(例如 Function、Cloud Run、Storage (...)),您可以激活 Domain Restriction Sharing Policy (DRS) .有了它,所有用户都被禁止了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 2019-06-14
      • 2017-02-03
      • 2019-12-12
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多