2014-10-09 106 views
5

我們正在計劃一個安全的Node.JS服務器,它使用多個第三方Web服務。每個都需要操作團隊需要配置的憑據。管理Node.JS的Web服務憑據的最佳實踐?

很明顯,他們可以簡單地將它們以明文形式放在配置文件中。

Microsoft .NET似乎提供了更好的DPAPI選項 - 請參閱Credential storage best practices。有沒有辦法通過IISNode使其可用?或者是否有任何其他選項可以在Node-JS配置中保護這些憑據?

  • 查爾斯

回答

1

有2種方式來做到這一點安全:

第一個是當您啓動您的應用程序使用命令行參數。

這些參數然後process.argv

於是發現,node myapp.js username password會給你:

process.argv[0]=node 
process.argv[1]=/.../myapp.js (absolute path) 
process.argv[2]=username 
process.argv[3]=password 

二是設置憑據作爲ENV變量。通常認爲這是最好的做法,因爲只有您有權訪問這些變量。

你將不得不使用export命令設置變量,比你訪問它在process.env

+0

感謝您的響應。但也許我沒有說清楚。這將是一個Web服務器 - 我沒有啓動「應用程序」。所以ENV變量和命令行參數最終都必須位於腳本的某個位置;使用它們不會提供額外的安全性。或者我錯過了什麼? – CharlesW 2014-10-09 16:56:39

+0

您的節點服務器仍然必須從某處啓動,因此您可以在運行服務器的計算機上設置env變量,不是嗎? – xShirase 2014-10-09 16:58:35

3

有幾個選項進行了廣泛討論,這裏包括由xShirase建議二:

http://pmuellr.blogspot.co.uk/2014/09/keeping-secrets-secret.html

用戶定義的服務解決了這個問題,但僅限於Cloud Foundry。

這個博客http://encosia.com/using-nconf-and-azure-to-avoid-leaking-secrets-on-github/指出你通常可以在服務器上單獨設置環境變量,並建議使用nconf分別讀取它們和配置文件。

我還在想,IIS是否有特色?

  • 查爾斯
0

我現在必須做同樣的事情對我的外部API憑據。這是我做過什麼

  • 安裝節點配置模塊
  • 創建一個名爲config文件夾和文件/ config.js
  • 這裏需要(配置)模塊
  • 在本地箱從讀configuation local.json文件
  • 我在本地有虛擬值。JSON的API密鑰和共享祕密
  • 我的QA環境中我出口兩個變量NODE_ENV =「QA」和NODE_CONFIG_DIR =「路徑QA服務器上我configuation文件夾」
  • 節點配置模塊從「路徑讀取configuation到您的config文件夾/ QA.json」
  • 現在我有QA.json真正API密鑰和證書
  • 在這裏你可以使用加密這些值進行加密,並把它放回QA.json
  • 在你的應用程序獲得這些配置值和解密在您的其他電話中使用它

希望這有助於。

所以你的配置可以和節點代碼一樣位於同一個容器中。

參考此用於加密和解密 http://lollyrock.com/articles/nodejs-encryption/