Подтвердить что ты не робот

JWT: Какой хороший секретный ключ и как его хранить в приложении Node.js/Express?

Во-первых, какой хороший способ генерации секретного ключа? Я должен ударить по множеству случайных клавиш на моей клавиатуре, чтобы создать их, но должно быть лучшее решение для этого. Объясните способ создания очень хорошего ключа.

Во-вторых, какой хороший способ сохранить ключ? Я мог бы написать ключ в моей конфигурации приложений, но это означает, что компромисс исходного кода будет компрометировать всю систему. Какие хорошие средства хранения секретного ключа в приложении Node.js Express?

4b9b3361

Ответ 1

Чтобы сгенерировать секрет программно, вы можете использовать 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);
});

Что касается сохранения этого, вы абсолютно правы, вы определенно не должны хранить секреты в своем исходном контроле. Лучшим способом было бы загрузить такую ​​конфиденциальную информацию из переменных окружения, например process.env.MY_SECRET.

Другой менее распространенный шаблон, который я видел, - загрузить секреты из файла, хранящегося отдельно от вашего кода. Возможно, ваше приложение node ищет файл JSON в ~/.myapp/secrets.json, например.