JWT:什么是一个好的秘密密钥,以及如何将它存储在Node.js / Express应用程序中?

时间:2015-05-06 23:51:44

标签: node.js security express jwt json-web-token

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

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

1 个答案:

答案 0 :(得分:29)

要以编程方式生成密码,您可以使用节点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文件。