【问题标题】:Firebase cloud function "Your client does not have permission to get URL /200 from this server"Firebase 云功能“您的客户端无权从此服务器获取 URL /200”
【发布时间】:2018-05-10 17:39:21
【问题描述】:

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

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

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

"Error: Forbidden 您的客户端无权获取 URL /200 从这个服务器。”

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

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

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

你知道有什么问题吗?

【问题讨论】:

  • 嗨@Alex9494 你解决这个问题了吗?干杯。
  • 嗨,Ivan 还没有,但我确实打算“很快”解决它......第一个得到答案的人把它给了另一个人! ;)
  • 看来我找到了问题的原因。这只是我正在调用的函数的崩溃。修复后,请求开始返回 200。
  • 这也是我的 firebase 云函数代码中的一个问题。使用 res.redirect()、res.send() 或 res.end() 终止 HTTP 函数firebase.google.com/docs/functions/terminate-functions

标签: firebase google-cloud-functions


【解决方案1】:

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

未经授权:

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

授权:

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

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

简单测试:

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

  2. type - gcloud auth print-identity-token

  3. 复制生成的令牌

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

  5. 在调用云函数时使用上述授权密钥

注意:

  1. 切勿向所有用户提供云功能

【讨论】:

  • 我尝试了授权,但令牌似乎即将到期。我无法使用昨天相同的令牌 :(
  • 这个令牌是 idToken - 它只有 3600 秒有效,之后你应该更新它。文档firebase.google.com/docs/auth/admin/manage-sessions
  • 请注意,这是函数的 Google Cloud 接口,而不是 Firebase 接口 -- 转至:console.cloud.google.com/functions
  • 如果我们使用上述建议的方法生成令牌,它将只有 1 小时有效。然后,我们不能再次使用相同的令牌。有没有办法生成永久令牌,只要提供正确的令牌,云功能就可以工作?
  • 如果您建议“永远不要让所有用户都可以使用云功能”,那么身份验证的最佳做法是什么?您是否建议为对函数的每个请求生成一个令牌?在函数中使用 Firebase Auth 并简单地将 API 的访问权限设置为“allUsers”还不够吗?
【解决方案2】:

来自 Cloud Function 文档:

注意:新的 HTTP 和 HTTP 可调用函数部署在任何 低于 7.7.0 版本的 Firebase CLI 默认为私有并抛出 调用时出现 HTTP 403 错误。要么明确地制作这些功能 公开,或在部署任何新的之前更新您的 Firebase CLI 功能。

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

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

【讨论】:

  • 这解决了我的问题。我安装了最新的 firebase-tools,在 FIrebase 控制台上删除了我的功能并重新部署了它。等等瞧。谢谢!
  • 除了更新 cli,我还必须启用未经身份验证的函数调用,如此处cloud.google.com/functions/docs/securing/…
【解决方案3】:

要明确:

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

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

  1. 点击权限标签
  2. 点击添加权限
  3. 新校长: allUsers
    角色: Cloud Functions Invoker

完成。

J

【讨论】:

  • 效果很好,谢谢
【解决方案4】:

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

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

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • 我遇到了同样的问题 - 您能否澄清一下“针对所有用户的目标云功能”是什么意思?
    • 这看起来存在安全风险?能否请您验证一下更改为 allUsers 是否没有任何安全风险?
    • @Nikhil 不是,您总是在处理公共 https 函数,并且可能在其中处理自定义身份验证。
    【解决方案6】:

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

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

    【讨论】:

    • 这并不牵强,它发生在我身上。步骤: 1. 部署了一个语法错误的函数,得到 Cloud Errors 有问题 错误(错误,叹气) 2. 使用更正的代码重新部署,认为一切正常 3. 看到条纹 webhook(命中函数)失败了Your client does not have permission to get URL 4. 再次尝试部署功能 - 没有修复错误 4. 找到这个帖子,删除所有功能,再次重新部署 - 修复
    【解决方案7】:

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

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

    【讨论】:

    • 我也面临同样的问题。我今天向 firebase 项目部署了一个新的云功能,但我无法执行它。给出完全相同的错误。 firebase 项目中的现有功能运行良好。所以看起来问题出在最近新部署的功能上。
    • 这里有同样的问题。大家能找到解决办法吗?
    【解决方案8】:

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

    检查那部分。

    【讨论】:

      【解决方案9】:

      启用从 Postman 项目的访问:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-07
        • 2022-07-20
        • 2020-07-16
        • 1970-01-01
        • 1970-01-01
        • 2018-06-10
        • 1970-01-01
        相关资源
        最近更新 更多