7

我真的很掙扎,應該如何隱藏我的鑰匙。我應該在哪裏存儲我的Node.js應用程序的密鑰?

我需要隱藏的兩個密鑰是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; 
    } 
}; 

回答

5

在Elastic Beanstalk中,我相信存儲像這樣的鍵的首選方法是通過環境變量。您可以使用命令eb setenv key=value來設置環境變量。有關此here的更多信息。

要訪問您提及的有關訪問DynamoDB和S3的AWS API,您根本不會使用密鑰。爲此,您可以將IAM實例配置文件分配給由Elastic Beanstalk創建的EC2服務器。這記錄在here

+0

這也是一種「安全方式」 – ConnorB

+3

eb setenv調用將通過SSL連接將密鑰名稱和值發送到AWS API,因此它是設置值的安全方式。我相信您也可以通過AWS Web控制檯執行相同的操作。只要您限制訪問您的AWS賬戶,它就是「安全」的。如果您希望獲得更多有關這些值的安全性,可以使用AWS Key Management Service(KMS)進行研究。您將不得不在構建應用程序時使用該服務,因爲它與Elastic Beanstalk沒有緊密集成。 –

-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; 
+0

但我會在生產過程中使用我的項目部署該文件嗎? – ConnorB

+0

是的,該文件應該在服務器上。你想不要把該文件放在服務器上?該文件或祕密不會在網絡上旅行,所以它的安全保存在服務器上的文件 –

+0

不會在服務器上以純文本格式輸入密鑰嗎? – ConnorB

相關問題