首页 > 解决方案 > 将服务帐户密钥存储在代码中不是一个坏主意吗?Firestore 文档说我应该

问题描述

我很可能误解了所有这些是如何工作的,因为我仍然是一个新程序员,但是在我参加的每门课程中,我都被告知不要在代码中公开任何凭据。

在此 Firestore 文档中,它告诉您将服务帐户的凭据存储为 JSON 文件,并将该文件包含在 SDK 访问的目录中。我认为这是一个安全问题是错误的吗?

Firestore 入门文档

在初始化 Firestore 下

要在您自己的服务器(或任何其他 Node.js 环境)上使用 Firebase Admin SDK,请使用服务帐号。转到 Cloud Platform Console 中的 IAM 和管理员 > 服务帐号。生成新的私钥并保存 JSON 文件。然后使用该文件初始化SDK:

const serviceAccount = require('./path/to/serviceAccountKey.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

const db = admin.firestore();

我在这里错过了什么吗?为什么可以这样做?

标签: firebasesecuritygoogle-cloud-platformgoogle-cloud-firestore

解决方案


事实上,这取决于我们如何解释“不要在代码中公开任何凭据”。

首先,一个主要的重要规则是永远不要将机密(密码、服务帐户密钥或任何其他机密数据)包含在源代码中,尤其是在源代码配置(git / github)中。

其次,在某些情况下,对服务或 API 进行身份验证的唯一解决方案是使用服务帐户密钥。在这种情况下,我们必须将此文件与源代码分开,并通过指向它的环境变量将其提供给应用程序。

如果您的代码在Google Cloud Platform(App Engine、Cloud Functions、Cloud Run、Firebase Functions...)上运行,您可以使用 GCP 直接提供的默认身份验证,并避免使用任何服务帐户密钥。检查Firebase 文档

在这种情况下,您将其保留在本地计算机上仅用于开发目的。


推荐阅读