2015-05-06 2 views
29

Erstens, was ist eine gute Methode zum Generieren eines geheimen Schlüssels? Ich sollte eine Menge zufälliger Tasten auf meiner Tastatur einwerfen, um eine zu erzeugen, aber es muss eine bessere Lösung dafür geben. Erklären Sie den Weg, einen sehr guten Schlüssel zu generieren.JWT: Was ist ein guter geheimer Schlüssel und wie man ihn in einer Node.js/Express App speichert?

Zweitens, was ist eine gute Möglichkeit, den Schlüssel zu speichern? Ich könnte den Schlüssel in meine Anwendungskonfiguration schreiben, aber das bedeutet, dass eine Kompromittierung des Quellcodes das gesamte System beeinträchtigt. Was ist gut, um den geheimen Schlüssel in einer Node.js Express App zu speichern?

Antwort

20

ein Geheimnis erzeugen programmatisch Sie die verwenden könnte Knoten crypto.randomBytes()

var crypto = require('crypto'); 
var jwt = require('jsonwebtoken'); 

crypto.randomBytes(256, function(ex, buf) { 
    if (ex) throw ex; 
    var token = jwt.sign({foo: 'bar'}, buf); 
    var decoded = jwt.verify(token, buf); 
}); 

Da dies für die Speicherung, sind Sie absolut richtig, sollten Sie auf jeden Fall nicht speichern Geheimnisse in die Quellcodeverwaltung. Ein besserer Weg wäre, solche sensiblen Informationen aus Umgebungsvariablen zu laden, zB process.env.MY_SECRET.

Ein anderes, weniger gebräuchliches Muster, das ich gesehen habe, ist das Laden von Geheimnissen aus einer Datei, die getrennt von Ihrem Code gespeichert ist. Sie könnten Ihre Knoten-App beispielsweise nach einer JSON-Datei in ~/.myapp/secrets.json suchen lassen.

+3

Ich entschied mich, mit dem Vorschlag zu gehen, eine JSON-Datei zu verwenden. Auf diese Weise kann meine App einfach den Inhalt dieser Datei importieren und ich kann sie in meine .gitignore-Datei schreiben, damit sie nicht in die Quellcodeverwaltung einbezogen wird. Eine andere großartige Sache ist, dass ich diese Dateien in Backup-Speicher speichern kann, falls sie verloren gehen. – Sam

+3

Außerdem habe ich die Methode 'buf.toString ('base64')' verwendet, um sie in Text umzuwandeln, der in einer Datei gespeichert werden kann. – Sam

+1

+1 für Umgebungsvariablen. Funktioniert perfekt mit Prozessmanagern wie PM2 oder in IDEs, in denen Sie env-Variablen angeben können. – felixfbecker

Verwandte Themen