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

首先,生成密钥的好方法是什么? 我应该用键盘上的许多随机键生成一个,但是必须有更好的解决scheme。 解释如何生成一个非常好的关键。

其次,什么是存储密钥的好方法? 我可以在我的应用程序configuration中编写密钥,但这意味着源代码的妥协将危及整个系统。 将密钥存储在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); }); 

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

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