2013-01-04 2 views
9

Sto provando ad aggiungere funzionalità di autenticazione alla mia applicazione. Il server di autenticazione implementa oauth 2.0come deve essere salvato il token di aggiornamento

Non so come salvare il refresh_token. Voglio salvarlo in un file, quindi la prossima volta che verrà avviata l'applicazione e sarà disponibile un refresh_token, potrà chiedere un nuovo access_token. L'utente non dovrà ricollegarsi di nuovo.

ma questo non mi sembra sicuro, perché se qualcuno copia il mio file che ha il refresh_token su un altro computer, può hackerare il mio account.

risposta

7

Sei corretto con l'attacco che descrivi. I token di aggiornamento devono essere conservati in modo sicuro per poter essere utilizzati come previsto. Come ho capito, stai costruendo un'applicazione standalone. Pertanto, è possibile fare affidamento sulla sicurezza del file system per impedire che un token di aggiornamento venga copiato da un utente non autorizzato. È possibile che si desideri utilizzare la crittografia anche per il token di aggiornamento, ma la chiave dovrebbe essere associata alla sessione di un utente sul computer locale (in caso contrario, l'utente dovrà fornirla durante la procedura di "accesso" per l'applicazione per decodificare il token di aggiornamento).

Potreste leggere il filo dal OAuth WG, che discute problemi simili a quello descritto e fornisce alcune linee guida: http://www.ietf.org/mail-archive/web/oauth/current/msg02292.html

+1

Si prega di dare un'occhiata qui https://developers.google.com/api-client-library/python/guide/aaa_oauth per una sezione con la seguente riga di codice: 'da oauth2client.file import Storage'. Quando ho usato quel codice per creare spazio di archiviazione, è stato semplicemente creato un semplice file JSON contenente tutte le informazioni. Uno dei vantaggi di questa classe 'oauth2client.file.Storage' è che è presumibilmente thread-safe. Tuttavia, nessuna crittografia viene utilizzata qui, quindi sono strappato. Google consiglia di utilizzare le loro librerie ogni volta che è possibile per evitare di "rovinare tutto". Tuttavia, quella classe di archiviazione non sta facendo molto. Pensieri? – Leonid

0

Hai ragione circa la vostra preoccupazione - non si deve salvare il token di aggiornamento. Così facendo, metti a repentaglio i dati del tuo cliente (e ne conosci la ragione, l'hai scritto nella domanda). oAuth non dovrebbe funzionare in questo modo. È necessario conservare il token di aggiornamento in memoria.

+3

Tuttavia, il token di aggiornamento verrebbe perso quando si esaurisce la memoria e dovrà richiedere all'utente l'accesso prima di eseguire nuovamente l'applicazione. –

+0

@JasonHall True; per evitare di chiedere all'utente le proprie credenziali, il progettista dell'applicazione deve accettare di mettere a repentaglio la sicurezza dell'utente (se il token viene rubato in qualche modo). – OhadR

+1

È possibile crittografare le credenziali o memorizzarle sul server e recuperarle (in modo sicuro) all'avvio dell'applicazione. Ma se questo non è fattibile allora sì, potresti chiedere il permesso ogni volta che l'app inizia. –

1

I token di aggiornamento vengono utilizzati per ottenere l'accesso (questa procedura richiede l'autenticazione di base HTTP). Quindi, a meno che l'utente non abbia la tua combinazione (id, secret), non può fare molto. Tuttavia, l'archiviazione del token di aggiornamento deve essere considerata molto seriamente.

Ecco i miei due centesimi:

  1. Conservare i gettoni in un DB

  2. Ogni volta che si utilizza token di aggiornamento per ottenere token di accesso ripristinare il token di aggiornamento pure. (OAuth2.0 ha questa funzione, è possibile lasciare che il token di aggiornamento invariato anche, ma è saggio in termini di prospettiva di sicurezza per mantenerlo cambiare e aggiornare il DB)

Spero che questo dà alcune intuizioni !!