环境变量中放置秘密?"/>
为什么以及如何在Node.js的环境变量中放置秘密?
我对Node.js和Express相对较新,我正在遵循有关使用JWT将身份验证添加到我的站点的指南,该指南位于Medium。对于本指南,我对使用机密感到困惑,说:
此秘密将在创建和验证令牌时由JWT库读取。在生产中,我们需要将此机密存储在环境变量中而不是文件中。
在指南中,他们将机密信息放置在配置文件中。我希望该指南描述为什么JWT机密到底应该是环境变量而不是配置文件中的原因,但是它非常模糊。那么,为什么机密应该是环境变量,使用机密的其他最佳实践还有哪些?我决定使用Passport&Express Sessions进行身份验证而不是JWT,但是我认为它仍然适用于会话机密。
我的下一个问题是,我如何在环境变量中准确设置一个秘密?我不再使用该指南,但是使用它的人将如何将该配置文件转换为环境变量?最后,您通常在典型的Node.js应用程序中使用什么环境变量?
回答如下:为什么机密应该是环境变量,而不是存储在配置文件中?
[在进行项目时,您最终将代码上传到github,每个人都可以访问。如果您将机密存储在配置文件中,那么拥有github帐户的任何人都可以读取它,因此存在安全风险。将机密存储为环境变量可确保其安全保存。您的配置文件应从process.env
对象读取这些值。像这样:
const jwtSecretKey = process.env.JWT_SECRET_KEY;
const googleApiKey = process.env.GOOGLE_API_KEY;
const serverPort = process.env.PORT || 8000; // 8000 is the default value in case if the env variable has not been set
module.exports = {
jwtSecretKey: jwtSectetKey,
googleApiKey: googleApiKey,
serverPort: serverPort
}
以及使用这些机密的任何其他代码段都需要配置文件。
const config = require('./config');
...
jwt.verify(token, config.jwtSecretKey);
除了将机密存储为环境变量外,还应将任何特定于环境的值存储为环境变量。例如,假设您的NodeJS服务器(即连接到托管数据库的服务器)在三种环境(开发,质量检查和PROD)上运行。这些环境中的每一个都将具有有关该环境应连接到的DB HOST和PORT的不同信息。环境变量是在每个单独的环境中存储数据库主机和端口的好方法,并且可以通过读取环境变量在所有环境中使用相同的代码连接到不同的数据库。
如何将值存储为环境变量-一种实现方法是手动,尽管我不建议这样做。一种方法是使用Shell脚本。它实际上取决于您的基础结构。
更多推荐
为什么以及如何在Node.js的环境变量中放置秘密?
发布评论