2014-10-09 7 views
5

Stiamo pianificando un server Node.JS sicuro, che utilizza diversi servizi Web di terze parti. Ciascuno richiede credenziali che dovranno essere configurate dal team operativo.Le migliori pratiche per la gestione delle credenziali del servizio Web per Node.JS?

Chiaramente potevano semplicemente inserirli in testo normale in un file di configurazione.

Microsoft .NET sembra offrire un'opzione migliore con DPAPI - vedere Credential storage best practices. C'è un modo per renderlo disponibile tramite IISNode? O c'è qualche altra opzione per proteggere tali credenziali nella configurazione di Node-JS?

  • Charles

risposta

1

Ci sono 2 modi per farlo in modo sicuro:

primo è quello di utilizzare i parametri della riga di comando quando si avvia la vostra applicazione.

Questi parametri sono poi trovati in process.argv

Quindi, node myapp.js username password darebbe:

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

secondo è quello di impostare le credenziali come variabili ENV. Generalmente è considerata la migliore pratica in quanto solo tu hai accesso a queste variabili.

Si dovrà impostare le variabili utilizzando il comando di esportazione, di quanto si potrebbe accedere in process.env

+0

Grazie per la risposta. Ma forse non mi sono chiarito. Questo sarà un server web - non ci sono "app" che lancio. Quindi sia le variabili ENV che i parametri della riga di comando finiranno per dover essere in uno script da qualche parte; utilizzarli non fornisce ulteriore sicurezza. O mi sono perso qualcosa? – CharlesW

+0

il server dei nodi deve ancora essere avviato da qualche parte, quindi è possibile impostare le variabili env sulla macchina che esegue il server, no? – xShirase

3

C'è una vasta discussione di diverse opzioni, tra cui i due suggerita da xShirase:

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

I servizi definiti dall'utente risolvono il problema, ma solo per Cloud Foundry.

Questo blog http://encosia.com/using-nconf-and-azure-to-avoid-leaking-secrets-on-github/ indica che è possibile impostare variabili di ambiente in modo indipendente sui server e suggerisce di utilizzare nconf per leggerli e configurare i file separatamente.

Mi chiedo ancora se ci sono offerte speciali per IIS?

  • Charles
0

Io attualmente aveva a che fare la stessa cosa per le mie credenziali API esterne. questo è quello che ho fatto

  • installare il modulo nodo-config
  • creare una cartella e file chiamato config/config.js
  • qui richiedono modulo (config)
  • Nella scatola locale legge il configuation da file local.json
  • Ho valori fittizi in locale.JSON per la chiave API e segreto condiviso
  • sul mio ambiente di QA esportare due variabili NODE_ENV = "QA" e NODE_CONFIG_DIR = "percorso della mia cartella configuation sul server di QA"
  • modulo nodo-config recita configuation da "percorso del cartella config/QA.json"
  • ora devo vera chiave api e delle credenziali in QA.json
  • qui è possibile utilizzare una crittografia per cifrare questi valori e rimetterlo in QA.json
  • nella tua app questi valori di configurazione e decifrati usalo nella tua chiamata di riposo

spero che questo aiuti.

in modo che la configurazione possa vivere nello stesso contenitore del codice di nodo.

si riferiscono a questo per la crittografia e la decrittografia http://lollyrock.com/articles/nodejs-encryption/