Использование Firebase Admin Auth в контейнере Cloud Run - PullRequest
0 голосов
/ 25 сентября 2019

Я использую аутентификацию администратора Firebase в качестве механизма аутентификации и авторизации (клиент отправляет токен, сервер будет проверять и проверять роли пользователей, содержащиеся в пользовательских заявках) на моем сервере Cloud Run, работающем на сервере Graphql.Модуль аутентификации администратора будет выдавать ошибку всякий раз, когда он пытается вызвать verifyIdToken.Вызов методов аутентификации администратора из облачных функций работает безупречно.

FirebaseAuthError: Необходимо инициализировать приложение с учетными данными сертификата или установить идентификатор проекта Firebase в качестве переменной среды GOOGLE_CLOUD_PROJECT для вызова verifyIdToken ().

Я попытался использовать служебную учетную запись ядра службы приложений (такую ​​же, как у облачных функций) и создать новую с ролью администратора Firebase в качестве учетной записи службы моего облачного запуска, но безрезультатно.Я могу запустить его, предоставив файл учетных данных (сгенерированный из консоли Firebase) в моем Dockerfile и установив переменную env 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')
  }
};

Разве эта учетная запись службы не должна иметь доступ кресурсы для аутентификации администратора?

1 Ответ

2 голосов
/ 25 сентября 2019

Боже мой, сообщение об ошибке говорит само за себя, я должен предоставить GOOGLE_CLOUD_PROJECT в облачном запуске env vars.

...