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

Sam*_*Sam 40 security node.js express jwt json-web-token

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

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

And*_*ers 31

要以编程方式生成秘密,您可以使用node的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);
});
Run Code Online (Sandbox Code Playgroud)

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

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

  • 另外,我使用`buf.toString('base64')`方法将其转换为可以存储在文件中的文本. (4认同)
  • 我决定采用建议来使用json文件.这样,我的应用程序可以简单地导入此文件的内容,我可以在我的.gitignore文件中写入它,因此它不会包含在源代码管理中.另一件好事是我可以将这些文件存储在备份位置,以防它们丢失. (3认同)