firebase - 将服务帐户密钥存储在代码中不是一个坏主意吗?Firestore 文档说我应该
问题描述
我很可能误解了所有这些是如何工作的,因为我仍然是一个新程序员,但是在我参加的每门课程中,我都被告知不要在代码中公开任何凭据。
在此 Firestore 文档中,它告诉您将服务帐户的凭据存储为 JSON 文件,并将该文件包含在 SDK 访问的目录中。我认为这是一个安全问题是错误的吗?
在初始化 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();
我在这里错过了什么吗?为什么可以这样做?
解决方案
事实上,这取决于我们如何解释“不要在代码中公开任何凭据”。
首先,一个主要的重要规则是永远不要将机密(密码、服务帐户密钥或任何其他机密数据)包含在源代码中,尤其是在源代码配置(git / github)中。
其次,在某些情况下,对服务或 API 进行身份验证的唯一解决方案是使用服务帐户密钥。在这种情况下,我们必须将此文件与源代码分开,并通过指向它的环境变量将其提供给应用程序。
如果您的代码在Google Cloud Platform
(App Engine、Cloud Functions、Cloud Run、Firebase Functions...)上运行,您可以使用 GCP 直接提供的默认身份验证,并避免使用任何服务帐户密钥。检查Firebase 文档。
在这种情况下,您将其保留在本地计算机上仅用于开发目的。
推荐阅读
- loops - R Markdown:使用 child.rmd 循环
- python - 如何在opencv python中检测和删除框架形式的边框?
- istio - 使用 istio 网关资源部署 amassador 作为后端得到 503
- c# - C# Microsoft Interop Excel 1997-2003 VBA 宏:双击事件进入单元格不起作用
- javascript - 如何使用量角器在表格中定位单元格
- php - JQuery 价格选择器滑块无法正常工作(已解决)
- vba - VBA 运行时:msvbvm60.dll 与 VBE7.DLL
- wso2 - WSO2 自定义调解器中的类强制转换异常
- javascript - 在 for 循环中使用 JQuery 选择器
- django - 如何解决 AWS Elastic Beanstalk Django 运行状况检查问题