繁体   English   中英

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

[英]Firebase cloud function "Your client does not have permission to get URL /200 from this server"

我刚刚做了一个firebase云功能:

exports.deleteAfterSevenDays = functions.https.onRequest((req, res) => {...

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

“错误:禁止您的客户端无权从该服务器获取 URL /200。”

我刚刚更新到 firebase Blaze 计划,因为我认为 Spark 计划存在限制,但它仍然无法正常工作。

在我的 firebase 云函数日志中,写着“函数执行耗时 572 毫秒,以状态码完成:302”。

我的 cron 作业“由于执行失败太多而被自动禁用”。

你看到有什么问题吗?

云功能应该有一个名为“所有用户”的成员的角色,可以从任何地方/任何人调用此功能,而无需考虑授权。

未经授权:

  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 print-identity-token

  3. 复制生成的令牌

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

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

笔记:

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

来自 Cloud Function 文档:

警告:使用低于 7.7.0 版本的任何 Firebase CLI 部署的新 HTTP 和 HTTP 可调用函数默认为私有,并在调用时引发 HTTP 403 错误。 要么明确公开这些函数,要么在部署任何新函数之前更新您的 Firebase CLI。

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

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

要清楚:

  1. 转到您的功能(确保选择了您的项目):

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

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

完毕。

Ĵ

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

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

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

将目标云功能的 IAM 角色(Cloud Functions Invoker)更改为allUsers应该可以解决此问题。 https://console.cloud.google.com/functions

以下是步骤

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

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

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

启用从 Postman 项目的访问:

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

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

它发生在我升级所有 NPM 包然后部署之后......我从 cloude 中删除了所有功能并重新部署它们。 它立即解决了我这个错误。 未经更改许可或任何其他更改

我知道这没有意义,或者不是一个真正的解决方案,但我通过让我的帐户成为 Firebase 项目的Owner来解决它。 当我是Editor时它工作得很好,但突然停止工作并将我的帐户设置为Owner现在解决了它。

我想这与某些帐户可以正确访问Service Account有关,该帐户是 Firebase Functions 和 Google Cloud API 的实际接口。

就我而言,当我输入请求正文时,我在 Postman 中出错了,我没有将格式从 Text 切换为 JSON。

检查那部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM