使用 Cloud Functions 进行 Firebase 身份验证失败:“请求未经身份验证”

问题描述 投票:0回答:1

我正在开发一个 React 应用程序,需要调用由 Firebase 身份验证保护的 python Google Cloud Function get2。但是,当我尝试调用云函数时,收到一条错误消息:“请求未经身份验证。要么允许未经身份验证的调用,要么设置正确的授权标头。” 如果我允许未经身份验证的调用,则一切正常,但我希望仅允许经过身份验证的用户能够调用云功能。 云函数将角色

Cloud Functions Invoker
分配给
allAuthenticatedUsers
,并且在云运行(因为它是第 2 代)的安全选项卡中我选择了
Require authentication
。 这是我的反应组件的片段:

const callCloudFunction = async () => {
    try {
      if (!auth.currentUser) {
        throw new Error("User not authenticated");
      }
      const helloWorld = httpsCallable(functions, 'hello_world');
      const response = await helloWorld();
      console.log(response.data);
      setResult(response.data);
    } catch (error) {
      console.error("Error calling Cloud Function:", error);
      setError(error.message || error.toString());
    }
  };

我还尝试添加令牌ID,如下所示:

// Get the ID token
            const token = await auth.currentUser.getIdToken();

            const helloWorld = httpsCallable(functions, 'hello_world', {
                // Include the Authorization header with the bearer token
                headers: {
                    Authorization: `Bearer ${token}`
                }
            });

但没有成功。预先感谢您。

编辑: 以下是有关云功能/云运行和 firebase 配置的一些附加信息:

云运行权限:(云运行->选择服务->权限) Screenshot of the roles/Principals for the cloud run service

云运行安全身份验证:(云运行 -> 单击服务 -> 安全选项卡)

enter image description here

云函数权限:(云函数->选择云函数->权限) enter image description here

由此,如果我将云运行安全身份验证更改为“允许未经身份验证的调用”,一切都会正常,但这可能是因为没有身份验证并且云功能是公共的。但是,另一方面,如果我将其保留为“需要身份验证”,我会在云运行日志中看到以下内容: enter image description here

在Firebase中,启用的身份验证方法是电子邮件/密码,并且当前创建了1个用户。我可以使用 firebase 身份验证登录,但无法对云功能进行经过身份验证的调用。

node.js firebase-authentication google-cloud-functions
1个回答
0
投票

Cloud Run 服务默认是私有部署的,这意味着如果不在请求中提供身份验证凭据,则无法访问它们。这些服务由 IAM 保护。默认情况下,服务只能由项目所有者、项目编辑者以及 Cloud Run 管理员和 Cloud Run 调用者调用。您可以在 Cloud Run 服务上配置 IAM 以向其他用户授予访问权限。

身份验证的常见用例包括:

允许公共(未经身份验证)访问:允许未经身份验证的服务调用,使服务可公开访问。

© www.soinside.com 2019 - 2024. All rights reserved.