我应该在哪里存储我的Node.js应用程序的密钥?

时间:2017-01-15 07:54:46

标签: node.js amazon-web-services amazon-s3 amazon-dynamodb elastic-beanstalk

我真的在努力隐藏我的钥匙。

我需要隐藏的两个密钥是secrets.crypto和secrets.jwt ...我计划使用Elastic Beanstalk在AWS上托管我的应用程序。

此外,我不确定在哪里可以将我的密钥用于访问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;
    }
};

2 个答案:

答案 0 :(得分:6)

在Elastic Beanstalk中,我认为存储这样的密钥的首选方法是通过环境变量。您可以使用命令eb setenv key=value来设置环境变量。有关此here的更多信息。

要访问您在访问DynamoDB和S3时提到的AWS API,您根本不会使用密钥。为此,您可以将IAM实例配置文件分配给Elastic Beanstalk创建的EC2服务器。记录在案here

答案 1 :(得分:-2)

为所有产品(如开发,生产)创建配置文件,并添加所有密钥init并在任何您想要的地方使用。

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;