JWT: что такое хороший секретный ключ и как его хранить в узле.с JS/Экспресс приложения?
во-первых, какой хороший метод генерации секретного ключа? Я должен ввести много случайных клавиш на клавиатуре, чтобы создать один, но должно быть лучшее решение для этого. Объясните, как создать очень хороший ключ.
во-вторых, каков хороший способ хранения ключа? Я мог бы написать ключ в конфигурации моих приложений, но это означает, что компромисс исходного кода скомпрометирует всю систему. Что такое хорошее средство хранения секретного ключа в узле.Яш Экспресс-приложение?
1 ответов
чтобы сгенерировать секрет программно, вы можете использовать крипто.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
.
другой менее распространенный шаблон, который я видел, - загрузить секреты из файла, хранящегося отдельно от вашего кода. Вы можете найти приложение node файл JSON в ~/.myapp/secrets.json
например.