2015-05-06 6 views
29

In primo luogo, qual è un buon metodo per generare una chiave segreta? Dovrei digitare un sacco di tasti casuali sulla mia tastiera per generarne uno, ma ci deve essere una soluzione migliore per questo. Spiega come generare una buona chiave.JWT: Qual è una buona chiave segreta e come conservarla in un'app Node.js/Express?

In secondo luogo, qual è un buon modo per memorizzare la chiave? Potrei scrivere la chiave nella configurazione delle mie applicazioni, ma ciò significa che un compromesso del codice sorgente comprometterà l'intero sistema. Cosa è utile per memorizzare la chiave segreta in un'app Node.js Express?

risposta

20

Per generare un segreto programatically si potrebbe usare 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); 
}); 

Per quanto riguarda la memorizzazione di questo, si è assolutamente corretto, non si dovrebbe assolutamente conservare i segreti del nodo nel controllo del codice sorgente. Un modo migliore sarebbe quello di caricare tali informazioni sensibili da variabili di ambiente, ad esempio process.env.MY_SECRET.

Un altro schema meno comune che ho visto è quello di caricare i segreti da un file memorizzato separato dal codice. Ad esempio, l'app nodo potrebbe cercare un file JSON in ~/.myapp/secrets.json.

+3

Ho deciso di andare con il suggerimento di utilizzare un file JSON. In questo modo, la mia app può semplicemente importare il contenuto di questo file e io posso scriverlo nel mio file .gitignore in modo che non sia incluso nel controllo del codice sorgente. Un'altra cosa fantastica è che posso archiviare questi file in posizioni di backup nel caso in cui si perdessero. – Sam

+3

Inoltre, ho usato il metodo 'buf.toString ('base64')' per convertirlo in testo che può essere memorizzato in un file. – Sam

+1

+1 per le variabili di ambiente. Funziona perfettamente con i process manager come PM2 o ​​IDE che ti permettono di specificare variabili env. – felixfbecker

Problemi correlati