JWT:什么是好的密钥,如何将其存储在 Node.js/Express 应用程序中?

JWT: What's a good secret key, and how to store it in an Node.js/Express app?

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

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

要以编程方式生成秘密,您可以使用节点的 crypto.randomBytes()

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);
});

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

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