【问题标题】:Using Firebase Admin Auth within Cloud Run Container在 Cloud Run Container 中使用 Firebase Admin Auth
【发布时间】:2020-01-25 13:21:51
【问题描述】:

我在运行 graphql 服务器的 Cloud Run 中使用 Firebase 管理员身份验证作为身份验证和授权机制(客户端发送令牌,服务器将验证并检查自定义声明中包含的用户角色)。每当尝试调用 verifyIdToken 时,admin auth 模块都会抛出错误。但是,从云函数调用管理员身份验证方法可以完美地工作。

FirebaseAuthError:必须使用证书凭据初始化应用或将您的 Firebase 项目 ID 设置为 GOOGLE_CLOUD_PROJECT 环境变量以调用 verifyIdToken()。

我尝试使用应用引擎服务帐户(与云功能使用的帐户相同)并创建一个具有 firebase 管理员角色的新帐户作为我的云运行服务帐户,但无济于事。我可以通过在我的 Dockerfile 中提供凭据文件(从 firebase 控制台生成)并设置环境变量 GOOGLE_APPLICATION_CREDENTIALS 来使其运行,但我想将其用作最后的手段,因为它非常难看。

下面是我的 Apollo 服务器的上下文函数

import { Context, ContextFunction } from 'apollo-server-core';
import { ExpressContext } from 'apollo-server-express/dist/ApolloServer';

import { firebase } from '../config';
import { batchLoaders } from './batchLoaders';

export const context: ContextFunction<ExpressContext, Context> = async ({
  req
}) => {
  const token = req.headers.authorization || '';
  const defaultContext = { batchLoaders };

  if (token.length === 0) return defaultContext;

  try {
    const { uid } = await firebase.auth.verifyIdToken(token);
    const user = await firebase.auth.getUser(uid);
    return { uid, claims: user.customClaims, ...defaultContext };
  } catch (err) {
    console.error(err);
    return defaultContext;
  }
};

以及从中导入 firebase 模块的文件。

const firebaseApp = initializeApp();

const auth = firebaseApp.auth();

const firestore = firebaseApp.firestore();

export const firebase = {
  auth,
  firestore,
  refs: {
    events: firestore.collection('_events'),
    versions: firestore.collection('_versions')
  }
};

不是同一个服务帐户应该能够访问管理员身份验证资源吗?

【问题讨论】:

    标签: firebase firebase-authentication firebase-admin google-cloud-run


    【解决方案1】:

    我的错,错误信息说明了一切,我需要在云运行环境变量中提供 GOOGLE_CLOUD_PROJECT。

    【讨论】:

    • 我可以吻你。我花了一整天的时间寻找这个。问题是我没有提到任何关于GOOGLE_CLOUD_PROJECT 环境变量的错误。我刚收到Must initialise FirebaseApp with a project ID to call verifyIdToken()。不过,在云运行中添加GOOGLE_CLOUD_PROJECT 作为环境变量解决了这个问题。
    【解决方案2】:

    在云端运行添加 GOOGLE_CLOUD_PROJECT 作为环境变量也解决了我的问题

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 2022-10-25
      • 2020-07-05
      • 2021-12-22
      • 2021-06-01
      • 2021-12-07
      • 2021-02-03
      • 2018-06-24
      • 2019-12-25
      相关资源
      最近更新 更多