📜  Node.js 应用程序的密钥应该存储在哪里?

📅  最后修改于: 2022-05-13 01:56:43.566000             🧑  作者: Mango

Node.js 应用程序的密钥应该存储在哪里?

保护敏感数据/凭据(例如 3rd Party API 凭据、会话密钥、数据库连接凭据、安全令牌、加密/解密密钥)非常重要,因为公开暴露凭据可能会导致您的帐户受到威胁,这可能会导致意外收费你的帐户。将秘密值放入源代码(通过硬编码),或提交凭证(将您的私钥、密码或其他敏感细节暴露)到版本控制中,可能真的是灾难性的。使用 Node.js 处理配置密钥或凭据(如 API 密钥)的最佳方法是使用环境变量

环境变量:环境变量能够从应用程序外部配置代码中的值。环境变量是动态名称/值对,可以创建任意数量的环境变量。环境变量存在于应用程序之外,并驻留在部署应用程序的应用程序的操作系统或容器中。大多数应用程序在实际部署到生产环境之前首先部署在开发环境中。因此,我们必须确保每个环境都已正确配置。环境变量能够为不同的环境提供不同的配置选项。

环境变量的一些常见示例是:

  1. 数据库连接信息
  2. API 端点
  3. 第三方 API 密钥和机密
  4. 电子邮件 ID 和密码
  5. HTTP 端口/地址

设置环境变量:

设置环境变量的语法如下,其中ENV_VARIABLE_NAME是我们的环境变量的名称, VALUE是该特定变量的值。

ENV_VARIABLE_NAME=VALUE

Node.js 提供process对象,它是提供有关当前 Node.js 进程的信息和控制的全局对象。作为一个全局变量,它始终可供 Node.js 应用程序使用,而无需使用 require()。进程对象有一个.env属性,该属性返回一个包含用户环境的对象。

读取环境变量:

要从.env 文件中读取环境变量,我们需要一些解析器来使其工作。解析器将变量一一读取并解析到环境中。有一个名为dotenv的 npm 包是一个零依赖模块,它将环境变量从.env 文件加载到process.env对象中。

模块安装:要安装此软件包,请在终端中键入以下命令:

npm install dotenv

需要模块:使用以下代码在应用程序中需要dotenv包:

require('dotenv').config();

现在,我们可以使用process.env.[ENV_VARIABLE_NAME]访问任何环境变量。

示例:假设我们正在开发一个电子商务 Node.js 应用程序,其中我们有以下环境变量,如服务器端口号、数据库连接 URL 和密码、条带 API 密钥、电子邮件 ID 和密码、会话密钥等。

第 1 步:在项目的根文件夹中创建一个名为“.env”的文件,该文件将存储我们所有的环境变量。例如,我们的文件如下所示:

测试环境

PORT=8080
DATABASE_URL=mongodb://localhost:27017/GFG
DATABASE_PASSWORD=
STRIPE_API_KEY=
EMAIL_ID=geeks.classes@geeksforgeeks.org
EMAIL_PASSWORD=

第 2 步:创建一个index.js文件,我们将在其中访问我们定义的环境变量。

index.js
require('dotenv').config({ path: './TEST.env' })
  
console.log("PORT:", process.env.PORT);
console.log("DATABASE_URL:", process.env.DATABASE_URL);
console.log("DATABASE_PASSWORD:", process.env.DATABASE_PASSWORD);
console.log("EMAIL_ID:", process.env.EMAIL_ID);
console.log("STRIPE_API_KEY:", process.env.STRIPE_API_KEY);
console.log("EMAIL_PASSWORD:", process.env.EMAIL_PASSWORD);


第 3 步:使用以下命令运行index.js文件:

node index.js

输出:

注意:始终将.env 文件添加到.gitignore以避免它提交到版本控制系统。如果您曾经错误地提交.env 文件,请尽快生成新的 API 密钥并更改密码,以免造成灾难性影响,并将其从版本控制系统中删除。