Github 中的 Firebase creditentials.json 文件?

Firebase creditentials.json file in Github?

我有一个带有 Firebase Admin 的 Nodejs 服务器。我现在对如何在我的 github 或任何我想托管服务器的地方准备好凭据感到困惑。在 Firebase 文档中,他们明确建议使用 export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json",这在生产环境中没有任何意义,因为您不能将此文件提交到 github 并且您不能按原样部署它(特别是如果您使用 github 构建您的图像并部署它)。那么在这种情况下通常的做法是什么?部署服务器时如何获取凭据?

这主要取决于您用于部署的工具和 运行 您的应用程序。如果运行ning on Kubernetes,可以使用Secrets to mount the json file on your containers. Docker and Docker Swarm provide similar capabilities。理想情况下,json 文件不应该永久打包到图像中。他们应该几乎总是安全 mounted/wired 在 运行 时间。

我通常使用具有从服务帐户文件中提取的值的环境变量:

FIREBASE_ADMIN_PRIVATE_KEY_ID='b819266b01e17ec23a63564d8c602d0fd729ecdf'
FIREBASE_ADMIN_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----xxx'
FIREBASE_ADMIN_CLIENT_EMAIL='xxx@xxx.iam.gserviceaccount.com'
FIREBASE_ADMIN_CLIENT_ID='xxx'
FIREBASE_ADMIN_AUTH_PROVIDER_X509_CERT_URL='https://www.googleapis.com/oauth2/v1/certs'
FIREBASE_ADMIN_CLIENT_X509_CERT_URL='https://www.googleapis.com/robot/v1/metadata/x509/xxx.iam.gserviceaccount.com'

其余部分包含在客户端配置中,因此可以安全地检查源代码管理:

const serviceAccount = {
  'type': 'service_account',
  'project_id': 'your-project-id',
  'private_key_id': dotenv.FIREBASE_ADMIN_PRIVATE_KEY_ID,
  // See: 
  'private_key': (dotenv.FIREBASE_ADMIN_PRIVATE_KEY as string).replace(/\n/g, '\n'),
  'client_email': dotenv.FIREBASE_ADMIN_CLIENT_EMAIL,
  'client_id': dotenv.FIREBASE_ADMIN_CLIENT_ID,
  'auth_uri': 'https://accounts.google.com/o/oauth2/auth',
  'token_uri': 'https://oauth2.googleapis.com/token',
  'auth_provider_x509_cert_url': dotenv.FIREBASE_ADMIN_AUTH_PROVIDER_X509_CERT_URL,
  'client_x509_cert_url': dotenv.FIREBASE_ADMIN_CLIENT_X509_CERT_URL,
} as ServiceAccount;

然后初始化应用程序:

import { initializeApp, cert } from 'firebase-admin/app';
app = initializeApp({ credential: cert(serviceAccount) });