2014-10-09 6 views
5

Wir planen einen sicheren Node.JS-Server, der mehrere Webdienste von Drittanbietern verwendet. Jeder benötigt Anmeldeinformationen, die vom Operations-Team konfiguriert werden müssen.Best Practice zum Verwalten von Web-Service-Anmeldedaten für Node.JS?

Natürlich konnten sie sie einfach in Klartext in einer Konfigurationsdatei setzen.

Microsoft .NET scheint mit DPAPI eine bessere Option anzubieten - siehe Credential storage best practices. Gibt es eine Möglichkeit, dies über IISNode verfügbar zu machen? Oder gibt es eine andere Möglichkeit, solche Anmeldeinformationen innerhalb der Node-JS-Konfiguration zu sichern?

  • Charles

Antwort

1

Es gibt zwei Möglichkeiten, um es sicher zu tun:

Erstens ist ein Kommandozeilen-Parameter zu verwenden, wenn Sie die App starten.

Diese Parameter werden dann in so process.argv

gefunden, würde node myapp.js username password geben Sie:

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

Zweitens die Anmeldeinformationen als ENV Variablen zu setzen ist. Es wird allgemein als die beste Vorgehensweise angesehen, da nur Sie Zugriff auf diese Variablen haben.

Sie würden die Variablen setzen haben den Exportbefehl verwenden, als Sie es in process.env

+0

Vielen Dank für die Antwort. Aber vielleicht habe ich mich nicht klar gemacht. Dies wird ein Webserver sein - es gibt keine "App", die ich starte. Also müssen ENV-Variablen und Befehlszeilenparameter irgendwo in einem Skript stehen; ihre Verwendung gibt keine zusätzliche Sicherheit. Oder habe ich etwas verpasst? – CharlesW

+0

Ihr Node-Server muss immer noch von irgendwo gestartet werden, so dass Sie die env-Variablen auf dem Rechner einstellen können, auf dem der Server läuft, nein? – xShirase

3

Es gibt eine umfangreiche Diskussion über verschiedene Möglichkeiten hier zugreifen würde, darunter die beiden von xShirase vorgeschlagen:

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

Benutzerdefinierte Dienste lösen das Problem, jedoch nur für Cloud Foundry.

Dieses Blog http://encosia.com/using-nconf-and-azure-to-avoid-leaking-secrets-on-github/ weist darauf hin, dass Sie oft Umgebungsvariablen separat auf Servern festlegen können, und schlägt vor, mit nconf sie zu lesen und Dateien separat zu konfigurieren.

Ich frage mich immer noch, ob es spezielle für IIS gibt?

  • Charles
0

Ich hatte noch genau die gleiche Sache für meine externen API-Anmeldeinformationen zu tun. das ist, was ich

  • tat Knoten-config-Modul
  • einen Ordner und Datei mit dem Namen config/config.js
  • hier benötigen (config) Modul
  • In lokaler Box liest sie die configuation aus installieren local.json Datei
  • Ich habe Dummy-Werte in lokalen.json für api Schlüssel und
  • auf meine QA-Umgebung shared secret i exportieren zwei Variablen NODE_ENV = "QA" und NODE_CONFIG_DIR = "Pfad zu meinem configuation Ordner auf qa Server"
  • Knoten-config-Modul liest configuation von „Pfad zu Ihrem Ordner config/QA.json“
  • jetzt habe ich echte api Schlüssel und Berechtigungsnachweis in QA.json
  • hier können Sie eine Verschlüsselung verwenden, um diese Werte zu verschlüsseln und es in QA.json setzen zurück
  • in Ihrer Anwendung erhalten Diese Config-Werte und Entschlüsselung verwenden Sie in Ihrem Ruhe-Anruf

hoffe das hilft.

Damit Ihre Konfiguration im selben Container wie der Node-Code leben kann.

bezeichnen dies für die Verschlüsselung und Entschlüsselung http://lollyrock.com/articles/nodejs-encryption/