首页 > 解决方案 > 如何验证最终用户身份验证令牌(使用 Firebase 身份验证)以调用谷歌云运行端点?

问题描述

请帮助最终用户使用 Firebase 身份验证在云运行中进行身份验证。

简短描述:我提交 Authorization: Bearer + idToken header from firebase function with idToken of authenticated with email/password firebase user user1。我将它提交到云运行实例,并为此user1设置了 Cloud Run Invoker 角色。但在云运行日志中,我看到以下错误:

该请求未被授权调用此服务。在https://cloud.google.com/run/docs/securing/authenticating了解更多信息

我究竟做错了什么?如何从经过身份验证的用户调用的 firebase 函数调用云运行端点调用?


更多细节:

我有一个带有电子邮件/密码 firebase 身份验证的简单 firebase 应用程序。当user1说 test@test.com 使用电子邮件/密码进行身份验证时,我使用 firebase.User.getIdToken() 为该用户获取 Id 令牌并将其提交给 firebase 函数。

在 firebase 功能方面,我提取用户令牌并将其作为 Authorization: Bearer + token header 提交到谷歌云运行端点:

export const getData = functions.https.onRequest(
  async (req, response) => {
    cors(req, response, async () => {
      getToken(req)
        .then(async (token: any) => {
              const options = {
                url: cloud_run.CLOUD_RUN_ENDPOINT,
                headers: {
                  Authorization: `Bearer ${token}`,
                },
              };
           request.get(options, async function (err, resp) {
             //Processing the result
           });
    //etc
    

在谷歌云运行上,我已经部署了云运行端点。在云运行权限选项卡上,我为我的user1 test@test.com 设置了 Cloud Run Invoker 角色。

但是当我执行上述的firebase函数getData时,我在云运行日志中看到了以下错误:

2020-10-29 14:30:13.498 MSK GET 401 0 B 0 ms@root+request/1.6.1 node/v10.22.0 linux/4.4.0 Linux/x64 https://<cloud_run.CLOUD_RUN_ENDPOINT> 请求是无权调用此服务。在https://cloud.google.com/run/docs/securing/authenticating了解更多信息

根据本手册: https : //cloud.google.com/run/docs/authenticating/end-users 进行 Firebase 身份验证:https ://cloud.google.com/run/docs/authenticating/end-users#cicp- firebase 身份验证

我需要实施身份平台或 Firebase 身份验证(完成)并手动验证他们的凭据。如何手动验证凭据?提交不记名授权令牌后我该怎么办?

标签: node.jsfirebaseauthenticationfirebase-authenticationgoogle-cloud-run

解决方案


为此,您有 2 个解决方案:


推荐阅读