管理 Node.JS Web 服务凭证的最佳实践?

问题描述 投票:0回答:4

我们正在规划一个安全的 Node.JS 服务器,它使用多个第三方 Web 服务。每个都需要由运营团队配置的凭据。

显然他们可以简单地将它们以纯文本形式放入配置文件中。

Microsoft .NET 似乎通过 DPAPI(数据保护 API)提供了更好的选项 - 请参阅凭证存储最佳实践。有没有办法通过 IISNode 实现此功能?或者是否有其他选项可以在 Node-JS 配置中保护此类凭据?

node.js credentials
4个回答
4
投票

这里对几个选项进行了广泛的讨论,包括 xShirase 建议的两个:

http://pmuellr.blogspot.co.uk/2014/09/keeping-secrets-secret.html

用户定义的服务解决了问题,但仅限于 Cloud Foundry。

此博客http://encosia.com/using-nconf-and-azure-to-avoid-leaking-secrets-on-github/指出您通常可以在服务器上单独设置环境变量,并建议使用nconf分别读取它们和配置文件。

我还想知道IIS有没有特价?


2
投票

有两种安全的方法:

第一个是在启动应用程序时使用命令行参数。

这些参数可以在

process.argv

中找到

所以,

node myapp.js username password
会给你:

process.argv[0]=node
process.argv[1]=/.../myapp.js (absolute path)
process.argv[2]=username 
process.argv[3]=password 

其次是将凭证设置为 ENV 变量。它通常被认为是最佳实践,因为只有您才能访问这些变量。

您必须使用导出命令设置变量,然后才能在

process.env

中访问它

1
投票

我目前必须对我的外部 API 凭据执行完全相同的操作。这就是我所做的

  • 安装节点配置模块
  • 创建一个名为 config/config.js 的文件夹和文件
  • 这里需要(配置)模块
  • 在本地框中,它从 local.json 文件读取配置
  • 我在 local.json 中有 api 密钥和共享秘密的虚拟值
  • 在我的 QA 环境中,我导出两个变量 NODE_ENV="QA" 和 NODE_CONFIG_DIR="qa 服务器上配置文件夹的路径"
  • node-config 模块从“配置文件夹路径/QA.json”读取配置
  • 现在我在 QA.json 中有真正的 api 密钥和凭证
  • 在这里您可以使用加密来加密这些值并将其放回到 QA.json 中
  • 在您的应用程序中获取这些配置值并解密,并在其余调用中使用它

希望这有帮助。

因此您的配置可以与节点代码位于同一容器中。

加密解密参考此 http://lollyrock.com/articles/nodejs-encryption/


0
投票

当前的最佳实践似乎是 https://www.freecodecamp.org/news/how-to-use-node-environment-variables-with-a-dotenv-file-for-node-js-and-npm /

dotenv/环境变量组合允许您将机密存储在根目录中的 .env 文件中,以进行开发和测试。但它还允许在生产服务器上提供更安全的解决方案,其中秘密可以作为环境变量从 HSM(硬件安全模块)或其他方式输入。

© www.soinside.com 2019 - 2024. All rights reserved.