JWT:What';这是一个很好的密钥,如何将其存储在Node.js/Express应用程序中?

JWT:What';这是一个很好的密钥,如何将其存储在Node.js/Express应用程序中?,node.js,security,express,jwt,json-web-token,Node.js,Security,Express,Jwt,Json Web Token,首先,生成密钥的好方法是什么?我应该在我的键盘上输入许多随机键来生成一个,但必须有更好的解决方案。解释生成非常好的密钥的方法 第二,存储密钥的好方法是什么?我可以在我的应用程序配置中编写密钥,但这意味着源代码的妥协将危及整个系统。在Node.js Express应用程序中存储密钥的好方法是什么?要通过编程生成密钥,可以使用Node的 至于存储这个,你是绝对正确的,你绝对不应该在你的源代码管理中存储秘密。更好的方法是从环境变量加载此类敏感信息,例如process.env.MY_SECRET 我见过

首先,生成密钥的好方法是什么?我应该在我的键盘上输入许多随机键来生成一个,但必须有更好的解决方案。解释生成非常好的密钥的方法


第二,存储密钥的好方法是什么?我可以在我的应用程序配置中编写密钥,但这意味着源代码的妥协将危及整个系统。在Node.js Express应用程序中存储密钥的好方法是什么?

要通过编程生成密钥,可以使用Node的

至于存储这个,你是绝对正确的,你绝对不应该在你的源代码管理中存储秘密。更好的方法是从环境变量加载此类敏感信息,例如
process.env.MY_SECRET


我见过的另一种不太常见的模式是从与代码分开存储的文件中加载机密。例如,您可以让您的节点应用程序在
~/.myapp/secrets.JSON
中查找JSON文件。

我决定同意使用JSON文件的建议。这样,我的应用程序只需导入此文件的内容,我就可以将其写入.gitignore文件中,这样它就不会包含在源代码管理中。另一个好处是,我可以将这些文件存储在备份位置,以防丢失。此外,我还使用
buf.toString('base64')
方法将其转换为可存储在文件中的文本。+1表示环境变量。与PM2之类的流程管理器或允许您指定环境变量的IDE中的流程管理器完美配合。由于此处未提及,因此添加-使用带有版本控制的文件是可以的,但您必须确保锁定对该文件的访问权限,以便只有需要该文件的用户/进程才能读取该文件。如果多个节点同时运行,则会获得不同的密钥。我怎样才能解决这个问题?
var crypto = require('crypto');
var jwt = require('jsonwebtoken');

crypto.randomBytes(256, function(ex, buf) {
  if (ex) throw ex;
  var token = jwt.sign({foo: 'bar'}, buf);
  var decoded = jwt.verify(token, buf);
});