7

Я действительно изо всех сил пытаюсь скрыть свои ключи.Где я должен хранить свои секретные ключи для моего приложения Node.js?

Два ключа, которые мне нужно скрыть, - secrets.crypto и secrets.jwt ... Я планирую разместить мое приложение на AWS, используя Elastic Beanstalk.

Также я не знаю, где бы я поместил ключи для доступа к таким вещам, как мой Dynamodb и мой ведро S3.

exports.generateToken = (type, user) => { 
    if (!_.isString(type)) { 
     return undefined; 
    } 

    try { 

     //Turn the json object of the current user's id and the type of token into a string 
     var stringData = JSON.stringify({ 
      _id: user._id, 
      type: type 
     }); 

     //Take the json string and encrypt it with a secret then turn it back into a string 
     var encryptedData = cryptojs.AES.encrypt(stringData, secrets.crypto).toString(); 

     //Take the encryptedData and turn it into a token with a secret 
     var token = jwt.sign({ 
      token: encryptedData 
     }, secrets.jwt); 

     return token; 
    } catch(e) { 
     return undefined; 
    } 
}; 

ответ

5

В эластичном бобовом стебле. Я считаю, что предпочтительный способ хранения таких ключей - это переменные среды. Вы можете использовать команду eb setenv key=value для установки переменной окружения. Дополнительная информация об этом here.

Для доступа к API AWS, который вы упомянули в отношении доступа к DynamoDB и S3, вы вообще не использовали бы клавиши. Для этого вы должны назначить профиль экземпляра IAM серверам EC2, созданным Elastic Beanstalk. Это документировано here.

+0

Это также «безопасный путь». – ConnorB

+3

. Вызов 'eb setenv' будет отправлять имя и значение ключа по SSL-соединению с AWS API, поэтому это безопасный способ установить значение. Я также могу сделать то же самое с помощью веб-консоли AWS. Он «безопасен», пока вы ограничиваете доступ к своей учетной записи AWS. Если вы хотите больше безопасности вокруг этих значений, вы можете изучить использование службы управления ключами AWS (KMS). Вы должны были бы использовать некоторую поддержку для использования этой услуги в своем приложении, хотя она не была тесно интегрирована с Elastic Beanstalk. –

-2

Создайте файл конфигурации для всех envoirments, как разработка, производство и добавить все секретные ключи инициализации и использовать в любом месте вы хотите.

config.json file 
{ 
"development": { 
    "Secret1": "Your Secret Here", 
    "Secret2": "Your Secret Here", 
    "db":{ 
     //development database settings here 
    } 
}, 
    "production": { 
    "Secret1": "Your Secret Here", 
    "Secret2": "Your Secret Here", 
    "db":{ 
     //development database settings here 
    } 
    } 
} 

var config = require('./config.json'); 
config.Secret1; 
+0

но могу ли я развернуть этот файл с моим проектом во время производства? – ConnorB

+0

Да, этот файл должен быть на сервере. Вы хотите, чтобы не захотеть разместить этот файл на сервере? Этот файл или секрет не будут путешествовать по сети, поэтому его можно хранить на сервере –

+0

Не будет ли это помещать ключи в обычный текст на сервере? – ConnorB

Смежные вопросы