2016-02-09 55 views
5

Attualmente sto scrivendo un'app di riga di comando NodeJS. L'app effettua una chiamata API e restituisce alcuni dati all'utente. Dato che questa è un'API pubblica, l'utente richiede un token API. Questa CLI verrà installata globalmente sulla macchina dell'utente tramite npm i -g super-cool-api-cli.Archiviazione sicura dei dati in un'app CLI di nodo

La prima volta che l'utente esegue la CLI, viene richiesto il token e quindi lo memorizzo in modo che ogni volta che lo eseguono non è necessario inserirlo. Ho fornito all'utente un modo per ripristinalo pure. Sto riporlo nel reale directory del mio modulo CLI, che come detto è installato a livello globale, e sembra qualcosa di simile:

fs.writeFile(__dirname+'/.token.json', JSON.stringify({ "token": token }, null, 2), 'utf8', (e)=>{ 
    // error handling and whatever 
}); 

nomino il file .token.json, utilizzando un punto per almeno rendere il file nascosto per impostazione predefinita.

Immagino che quello che sto chiedendo sia se esiste un modo migliore/più sicuro di memorizzare le informazioni sensibili in un'app di riga di comando NodeJS, che verrebbe eseguito più volte. Ho pensato di usare cose come environment variables ma sembrano scadere alla fine del processo.

Le considerazioni di sicurezza sono un'abilità che mi manca, ma desidero fortemente saperne di più, quindi grazie in anticipo per i suggerimenti.

+0

Ho bisogno di fare una cosa simile come con l'app CLI del nodo. Ho notato che non hai accettato nessuna risposta, che cosa hai fatto? Grazie! –

+0

@JoshPinter Abbiamo finito per utilizzare un modulo chiamato [buttercup] (https://buttercup.pw/) per memorizzare i dati dietro una password. [C'era un piccolo dibattito] (https://github.com/himynameisdave/git-labelmaker/issues/14) a riguardo perché sembrava semplice. Il progetto è [qui sopra] (https://github.com/himynameisdave/git-labelmaker) e ha un sacco di utenti attivi, quindi questa soluzione sembra aver funzionato bene per noi :) –

+0

Interessante ... grazie per aver risposto ! Buttercup sembra una buona sostituzione di 1Password. Non ho pensato di usarlo anche per memorizzare le password. Saluti! –

risposta

1

È possibile memorizzare il token in SQLite, e impostare un nome utente/password per il file sqlite.db, qui ci sono le associazioni per SQLite https://github.com/mapbox/node-sqlite3

+0

Quindi ho ancora bisogno che l'utente abbia localmente un nome utente/password sensibile, giusto? Mi dispiace di essere normalmente un front-end, quindi questo DB/materiale di sicurezza è un po 'strano ... –

+0

@DaveLunny non preoccuparti. Sì, avresti comunque bisogno che l'utente inserisca il nome utente e la password, ma il token memorizzato sarà sicuro e crittografato sul filesystem (che pensavo fosse il problema di sicurezza). Per la CLI, è possibile codificare una cache per sessione (in memoria, non filesystem) del nome utente/password in modo che l'utente debba inserire solo il nome utente e la password una volta per sessione (sulla CLI/finestra del terminale). Cioè, l'utente dovrebbe solo inserire un nome utente e una password la prima volta che apre il terminale ed esegue l'app CLI. –

+0

Hmm è abbastanza buono, ma non mi piace che sia stato memorizzato solo per una sessione. Ciò renderà meno user-friendly ma ovviamente risolverà il problema di un token non crittografato che viene memorizzato come un file JSON, e ricordare una combinazione di nome utente/password è ancora meglio che ricordare/copiare + incollare un intero token ogni volta. Guarderemo più in questa soluzione, grazie! –

4

Penso che sia meglio usare gli impianti di stoccaggio di credenziali fornite dal sistema operativo per questo genere di cose, presupponendo ovviamente che ogni utente abbia il proprio account sulla macchina. L'unico pacchetto NPM che conosco che gestisce è node-keytar.

+0

Suoni davvero legittimi, grazie! Quindi essenzialmente creerei un nuovo "servizio" sul portachiavi per la mia app in cui posso salvare il token come password? –

+0

Sì, questa è l'idea. –

Problemi correlati