Firebase云功能"您的客户端无权从此服务器获取URL/200"

Ale*_*494 9 firebase google-cloud-functions

我刚刚制作了一个firebase云功能:

exports.deleteAfterSevenDays = functions.https.onRequest((req, res) => {...
Run Code Online (Sandbox Code Playgroud)

我部署了该函数并获得了一个函数URL.当我从浏览器请求此URL时,我收到以下消息:

"错误:禁止您的客户端无权从此服务器获取URL/200."

我刚刚更新到firebase Blaze计划,因为我认为Spark计划有局限性,但它仍然无效.

在我的firebase云功能日志中写着"函数执行花了572毫秒,完成状态代码:302".

我的cron作业"由于执行失败太多而自动被禁用".

你看到了什么问题吗?

谢谢,

亚历克斯

小智 79

云函数应该具有名为“所有用户”的成员的角色,以便从任何地方/任何人调用此函数,而无需考虑授权。

未经授权:

  1. 转到云功能选项卡
  2. 选择您的云功能(复选框)
  3. 点击右侧权限选项卡下的“添加成员”
  4. 在“新成员”下输入“allUsers”
  5. 选择角色为“云函数 -> 云函数调用者”
  6. 节省
  7. 只需将其粘贴到浏览器中即可测试您的云功能

有授权:

在您的云功能上设置授权始终是一个好习惯

注意:云函数抛出错误“403 Forbidden - Your client does not have permission to get URL”应该由授权用户调用。

简单测试:

  1. 单击顶部的 Cloud shell(icon) 终端

  2. 类型 - gcloud auth 打印身份令牌

  3. 复制生成的令牌

  4. 形成调用云函数时传递的授权密钥 4.1 授权:bearergenerated_token

  5. 调用您的云功能时使用上述授权密钥

笔记:

  1. 永远不要让所有用户都可以使用云功能

  • 请注意,这是 Functions 的 Google Cloud 接口,而不是 Firebase 接口 - 请访问:https://console.cloud.google.com/functions (7认同)
  • 如果我们使用上述建议的方法生成令牌,则该令牌的有效期仅为 1 小时。然后,我们不能再次使用相同的令牌。有没有办法生成永久令牌,以便只要提供正确的令牌,云功能就可以工作? (3认同)
  • 如果您建议“永远不要向所有用户提供云功能”,那么身份验证的最佳实践是什么?您是否建议为每个函数发出的请求生成一个令牌?在函数中使用 Firebase Auth 并将 API 的访问权限设置为“allUsers”难道还不够吗? (2认同)

Jon*_*han 51

需要明确的是:

  1. 转到您的函数(确保选择您的项目):

https://console.cloud.google.com/functions/details/us-central1/ssr

  1. 单击权限选项卡
  2. 单击添加权限
  3. 新校长: allUsers
    角色: Cloud Functions Invoker

完毕。

J


小智 30

来自云函数文档:

注意:使用低于 7.7.0 版本的任何 Firebase CLI 部署的新 HTTP 和 HTTP 可调用函数默认是私有的,并且在调用时会抛出 HTTP 403 错误。明确公开这些函数,或者在部署任何新函数之前更新 Firebase CLI。

就我而言,CLI 版本已过时。如果您当前收到 403 错误,请尝试以下操作:

  1. 删除您的云函数
  2. 更新 Firebase CLI npm install -g firebase-tools
  3. 重新部署您的功能

  • 此外,如果首次部署期间出现错误,新的云功能权限可能会被错误设置 - 删除该功能并重新部署为我解决了这个问题 (4认同)
  • 这解决了我的问题。我安装了最新的 firebase-tools,删除了 FIrebase 控制台上的函数并重新部署它。等等瞧。谢谢你! (3认同)
  • 除了更新 cli 之外,我还必须启用未经身份验证的函数调用,如下所示:https://cloud.google.com/functions/docs/securing/managing-access-iam#allowing_unauthenticated_function_inspiration (2认同)

Kal*_*y S 15

以下是步骤

  • 进入 Google Cloud Console(不是 Firebase Console) -> 搜索 Cloud Functions 查看函数列表
  • 单击要授予访问权限的功能旁边的复选框。
  • 单击屏幕顶部的权限。权限面板打开。
  • 单击添加主体。
  • 在新主体字段中,输入 allUsers。
  • 从角色中选择 Cloud Functions > Cloud Functions Invoker
  • 选择角色下拉菜单。
  • 单击“保存”。


Dio*_*lor 9

如果您在 2020 年遇到这种情况,也可能是由于不同的访问行为:

注意:自 2020 年 1 月 15 日起,HTTP 功能默认需要身份验证。您可以指定函数在部署时或部署后是否允许未经身份验证的调用。

https://cloud.google.com/functions/docs/securing/managing-access-iam#allowing_unauthenticated_function_invocation


tho*_*mas 9

这可能有点牵强,但如果您中断了云函数部署,然后重新部署了该函数(这会导致错误),然后成功地重新部署了该函数,则可能会导致问题。

我正在尝试重现,但简单地删除 firebase 控制台中的功能并重新部署对我有用。

  • 这并不牵强,它发生在我身上。步骤: 1. 部署一个有语法错误的函数,得到 Cloud Errors 出现问题错误(错误,叹气) 2. 使用更正的代码重新部署,认为一切正常 3. 看到 stripe webhooks(命中函数)失败`您的客户端没有权限获取 URL` 4. 再次尝试部署函数 - 没有修复错误 4. 找到这篇文章,删除所有函数,再次重新部署 - 修复 (4认同)

小智 8

将目标云函数的 IAM 角色(云函数调用者)更改为allUsers应该可以解决此问题。https://console.cloud.google.com/functions

  • 这看起来有安全风险吗?请您验证一下更改为allUsers是否不会有安全风险? (2认同)

gen*_*ser 7

启用 Postman 项目的访问:

  1. 打开https://console.cloud.google.com/functions
  2. 打开cloud shell(右上角终端图标)
  3. 写:gcloud auth print-identity-token
  4. 复制您的令牌并打开您的 Posman
  5. 右键单击您的收藏 -> 编辑
  6. 授权->选择类型OAuth 2.0
  7. 将您的令牌粘贴到访问令牌中

注意:您可以对单个请求或文件夹执行相同的操作。


yeh*_*kel 6

在我升级所有 NPM 软件包然后部署后,这种情况发生在我身上......我从 cloude 中删除了所有功能并重新部署它们。它立即解决了我这个错误。没有更改权限或任何其他更改