【问题标题】:How to avoid "401 Unauthorized" when invoking Firebase callable HTTP Function under GCP organization?在 GCP 组织下调用 Firebase 可调用 HTTP 函数时如何避免“401 Unauthorized”?
【发布时间】:2020-07-24 08:13:34
【问题描述】:

我有一个 GCP 组织下的 Firebase 项目。我有 NodeJS 10 可调用函数,可以在 Firebase 本地模拟器和 GCP 函数测试页面中正常工作,但是当尝试在 webapp 中使用 httpsCallable 在生产中调用它们时,我得到 401 Unauthorized - 您的客户端没有请求的 URL 的权限

我的测试函数几乎没有 - 它只是返回一个硬编码的字符串。调用尝试后日志中没有任何内容。

函数调用尝试是在webapp中通过Firebase身份验证后完成的,在开发中我看到确实将用户传递给了上下文参数。

我使用 Firebase Tools 8.0.2 进行部署。

在 GCP 控制台功能详细信息中,我看到“入口设置 - 允许所有流量”,正如我上面所写,它从那里的测试选项卡成功运行。

我尝试公开该功能,但无法在控制台或 gcloud 中设置权限。当我尝试使用 gcloud 运行以下命令时:

gcloud functions add-iam-policy-binding my-function-name \
 --member="allUsers" \
 --role="roles/cloudfunctions.invoker"

我明白了:

ERROR: (gcloud.functions.add-iam-policy-binding) ResponseError: status=[403], code=[Forbidden], message=[Permission 'cloudfunctions.functions.setIamPolicy' denied on resource 'projects/my-project-name/locations/us-central1/functions/my-function-name' (or resource may not exist).]

即使我的帐户具有以下角色:项目所有者、云功能管理员、安全管理员、IAP 策略管理员、组织管理员

任何指导将不胜感激。

【问题讨论】:

  • 错误信息表示CLI使用的凭证没有权限。仔细检查帐户:gcloud auth list、您的项目gcloud config list 以及分配给您帐户的角色gcloud projects get-iam-policy PROJECT_ID
  • 确实 gcloud 活动帐户不正确,将其设置为正确的帐户允许我设置 IAM 以公开功能。谢谢约翰。我不明白的是,如果在通过 Firebase 身份验证后调用该函数,为什么根本需要这样做。我还尝试设置 allAuthenticatedUsers 而不是 allUsers,但仍然出现相同的错误。我是否混淆了两种类型的用户?
  • 发布一个答案,显示您的原始问题的解决方案(包括您如何确定解决方案的步骤)。然后为您的新问题创建一个新问题。尽量不要将评论部分用作其他问题的聊天室。

标签: firebase google-cloud-platform google-cloud-functions


【解决方案1】:

根据 John 的说明,结果发现 gcloud 设置为不正确的活动帐户,因此我使用 gcloud config set account my-email@my-domain.com 将其设置为具有所需权限的正确帐户,然后我能够使用该函数公开调用

gcloud functions add-iam-policy-binding my-function-name \
 --member="allUsers" \
 --role="roles/cloudfunctions.invoker"

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2018-07-18
    • 2021-06-08
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多