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 например.