node.js - 为什么以及如何将 secret 放入 Node.js 的环境变量中?

标签 node.js express jwt environment-variables

我对 Node.js 和 Express 比较陌生,我正在遵循使用 JWT 向我的网站添加身份验证的指南:Medium .我对本指南中关于使用 secret 的一点感到困惑,它说:

This secret will be read by JWT library while creating and validating tokens. In production, we need to store this secret in environment variable instead of a file.



在指南中,他们将 secret 放在一个配置文件中。我希望指南描述了为什么 JWT secret 应该是环境变量而不是配置文件,但它非常含糊。那么为什么 secret 应该是环境变量,使用 secret 的其他最佳实践是什么?我决定使用 Passport & Express Sessions 而不是 JWT 进行身份验证,但我认为它仍然适用于 session secret 。

我的下一个问题是如何在环境变量中准确设置 secret ?我不再使用该指南,但是使用它的人如何将该配置文件转换为环境变量?最后,您通常在典型的 Node.js 应用程序中使用环境变量做什么?

最佳答案

为什么 secret 应该是环境变量,而不是存储在配置文件中?

在处理项目时,您最终会将您的代码上传到 github 上,每个人都可以访问。如果您将 secret 存储在配置文件中,任何拥有 github 帐户的人都可以读取它,因此存在安全风险。将 secret 存储为环境变量可确保其安全保存。您的配置文件应该从 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
}

使用这些 secret 的任何其他代码都应该需要配置文件。
const config = require('./config');
...

jwt.verify(token, config.jwtSecretKey);

除了将 secret 存储为环境变量之外,您还应该将任何特定于环境的值存储为环境变量。例如,假设您的 NodeJS 服务器(即连接到托管数据库)在三个环境中运行 - 开发、QA 和 PROD。这些环境中的每一个都有关于 DB HOST 和 PORT 的不同信息,环境应该连接到。环境变量是在每个单独的环境中存储 DB Host 和 Port 的好方法,并且可以在所有环境中使用相同的代码通过读取环境变量来连接到不同的数据库。

如何将值存储为环境变量 - 一种方法是手动,但我不建议这样做。一种方法是使用 shell 脚本。这实际上取决于您的基础设施。

关于node.js - 为什么以及如何将 secret 放入 Node.js 的环境变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61669613/

相关文章:

javascript - 在 Node JS 应用程序中实现单例 mongoDB DB 对象

javascript - express.js - session 访问中间件不工作

node.js - Sequelize HasMany 不起作用

javascript - '未捕获的语法错误 : Unexpected token <' in Node. js

asp.net-core - 如果与 JWT 承载身份验证一起使用,Asp.Net 核心 Web API 防伪验证将失败

json - 指导如何实际加密 APNS 的 JSON token

php - 使用 Symfony 5.3 检查 JWT (Firebase) token

javascript - 如何使用环回和 mongodb 将嵌套对象中的属性转换为 ObjectId?

node.js - Nodejs 中的 Wav 到 Blob

javascript - 使用node或express js从请求中获取客户端Windows登录用户名