2015-05-06 13 views
29

Po pierwsze, jaka jest dobra metoda generowania tajnego klucza? Powinienem uderzyć w wiele losowych klawiszy na mojej klawiaturze, żeby je wygenerować, ale musi być lepsze rozwiązanie tego. Wyjaśnij sposób generowania bardzo dobrego klucza.JWT: Jaki jest dobry tajny klucz i jak go przechowywać w aplikacji Node.js/Express?

Po drugie, jaki jest dobry sposób na przechowywanie klucza? Mógłbym zapisać klucz w mojej konfiguracji aplikacji, ale oznacza to, że kompromis kodu źródłowego zagraża całemu systemowi. Jaki jest dobry sposób przechowywania tajnego klucza w aplikacji Node.js Express?

Odpowiedz

20

Aby wygenerować tajemnicy programowo można użyć węzła 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); 
}); 

chodzi o przechowywanie tego, jesteś absolutnie poprawne, nie należy zdecydowanie przechowywania sekretów w swojej kontroli źródła. Lepszym sposobem byłoby załadowanie takich poufnych informacji ze zmiennych środowiskowych, np. process.env.MY_SECRET.

Innym, mniej popularnym wzorem, jaki widziałem, jest ładowanie sekretów z pliku przechowywanego oddzielnie od kodu. Możliwe, że aplikacja węzła będzie szukała na przykład pliku JSON w wersji ~/.myapp/secrets.json.

+3

Postanowiłem pójść z propozycją użycia pliku json. W ten sposób moja aplikacja może po prostu zaimportować zawartość tego pliku i mogę ją zapisać w pliku .gitignore, aby nie była uwzględniana w kontroli kodu źródłowego. Kolejną wspaniałą rzeczą jest to, że mogę przechowywać te pliki w lokalizacjach kopii zapasowych na wypadek ich zagubienia. – Sam

+3

Użyłem również metody 'buf.toString ('base64')', aby przekonwertować ją na tekst, który można zapisać w pliku. – Sam

+1

+1 dla zmiennych środowiskowych. Działa doskonale z menedżerami procesów, takimi jak PM2 lub w IDE, które umożliwiają określenie zmiennych env. – felixfbecker

Powiązane problemy