在哪里"隐藏" API密钥

时间:2017-12-14 21:44:43

标签: javascript api security algolia

我的问题是关于何处以及如何:

  1. 隐藏API密钥
  2. 访问app.js文件中隐藏的API密钥
  3. 在这种情况下,我正在处理Algolia Admin API密钥(但目的是以相当通用的方式提出这个问题)。

    为了让我的应用程序正常工作,我需要根据某些用户操作更新我的Algolia索引(需要管理员API密钥才能执行此操作)。

    我知道我不应该将我的Admin API密钥暴露给前端(即不要将它放在我的app.js文件中)。如何安全地将API管理密钥传递到我的app.js文件,以便我可以更新我的Algolia索引?

    我遇到的一些事情:

    - 我应该将其隐藏在config.json文件中吗?我无法弄清楚如何在我的js中使用从配置文件中导出的信息(这可能会破坏目的?)。我看了this

    - 在提及的Firestore文档中,提到了与Algolia合作," App ID和API Key存储在函数配置变量"中。如何将API密钥存储在配置变量中?

    -I阅读this关于使用环境变量,并将它们导出到app.js文件。但是,如果我然后将app-env文件推送到服务器(我假设我需要为了让app.js文件读取API密钥),那么如何将其安装到文件中更安全?

2 个答案:

答案 0 :(得分:4)

您无法通过任何机制将密钥提供给客户端,并保密。

构建一个Web服务(使用您选择的服务器端语言,使用适当的任何身份验证)并编写您自己的API以允许执行有限的操作选择。然后,您的Web服务将充当Algolia的客户端。

答案 1 :(得分:0)

在做了一些研究之后,这就是我的决定。

我需要创建一个单独的.js文件,其中包含Admin API Key和侦听数据库更改的函数,并对Algolia进行适当的更新(这很明显)。

接下来我需要让该文件运行。我相信我有两个选择:

  1. 在本地运行该文件。这是安全的,因为文件不在本地计算机之外的任何地方提供。这里的主要缺点是我基本上必须始终保持文件打开,这在生产中很快就会变得不切实际。

  2. 将我的文件托管在像Heroku,Nodejitsu这样的地方,以便它可以永久地在他们的服务器上运行。