【问题标题】:Firebase Functions and API KeysFirebase 函数和 API 密钥
【发布时间】:2021-03-15 14:02:43
【问题描述】:

Firebase 函数是为 React 应用存储 API 密钥的安全地方吗?例如,请参阅 Firebase Cloud 函数中的 axios API 调用的以下模板:

cloud function template

编辑:添加了文本代码 sn-p。考虑到它是一个 Firebase 云功能,将 API 密钥直接存储在这个 sn-p 中是否安全的问题。

exports.getAlphaData = functions.https.onRequest((request, response) => {    

    const fetchAlphaData = async () => {        

        // Axios Call
        const result = await axios(
            'https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=SPY&XXXXXX',
        );

        // Expressjs Respond        
        response.send(result.data);

    };

    fetchAlphaData();

});

如果这个函数是在 React 应用程序中定义的,它将暴露我的 API 密钥。 React 官方文档以及其他来源说永远不要将 .env 文件用于敏感数据,因此我也将这种方法留给了密钥。原始 API 密钥实际驻留在全栈应用程序中的最佳位置在哪里?

【问题讨论】:

  • 在 Stack Overflow 上,请不要显示文字和代码的图片。将文本复制到问题本身并设置格式,以便于阅读、复制和搜索。您可以使用底部的编辑链接编辑问题以更正此问题。
  • 按要求添加

标签: javascript reactjs firebase google-cloud-functions


【解决方案1】:

Firebase 可以使用 Google Cloud Platform Services,您可以将 GCP Secret Manager 与此服务集成到您的函数中,您可以存储您的原始密钥(这些将被加密)并由您的代码函数检索,这具有您可以限制的好处通过Cloud IAM 和服务帐户访问。

这可以帮助您定义项目的哪些成员或哪些服务帐户可以访问 API 密钥(秘密)

可以配置对机密的权限,即使开发人员也无法看到生产环境密钥,通过assigning access permissions 对机密,但允许函数可以获取机密(因为与您的函数关联的服务帐户可以读取机密)。

在本文档中,您可以找到关于如何使用 GCP Secret Manager 的code example

【讨论】:

  • 谢谢,这正是我想要的。
  • @Jacob 如果此答案有用,请点赞并将其标记为已接受,这可以帮助其他人找到相同问题的答案。
【解决方案2】:

是的,API 密钥在 Firebase Cloud Functions 中是安全的,因为此代码在服务器端运行并且从未向用户显示。

您还可以在严格的访问控制下将密钥存储在您的数据库(Firestore、实时数据库)中,并在运行时查询它以获取密钥,这样您甚至可以在 GitHub 上发布您的代码并且它不会有API 密钥直接硬编码在代码中。

【讨论】:

  • 感谢您的反馈,这是我的下一个问题!
猜你喜欢
  • 1970-01-01
  • 2017-03-09
  • 2019-01-19
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 2019-04-30
相关资源
最近更新 更多