Sto utilizzando il login di Facebook in un'app mobile nativa e sto cercando di capire se il mio approccio è abbastanza sicuro.
Questo è il flusso (tutte le comunicazioni avvengono tramite SSL):
-
L'utente accede a Facebook tramite l'app mobile.
-
L'app passa la chiave di accesso a breve termine di Facebook dell'utente al server.
-
Il server utilizza la chiave e invia una richiesta a Facebook per recuperare i dettagli dell'utente e ottenere la chiave di accesso a lungo termine di Facebook.
-
Se la richiesta di Facebook ha esito positivo viene creato un utente nel mio DB.
-
Viene quindi creato un oggetto per quell'utente, che include il suo ID di Facebook, il token di Facebook e la data di creazione. Tale oggetto viene crittografato utilizzando Rijndeal (256 bit) e restituito al client. D'ora in poi tutte le richieste dal client includono quel token. Il token è valido per 48 ore. Quando il token scade, uso ancora una volta la chiave di accesso di Facebook e faccio una richiesta a Facebook. Se la chiave di accesso di Facebook è ancora valida, un nuovo token viene generato e restituito al client.
- Quando l'utente vuole i suoi dati, il client invia il token, se la decrittografia del token ha esito positivo uso il suo Facebook Id (che è anche l'ID che uso per l'utente), che fa parte del token, per recupera i suoi dati e li rimanda al client.
Ho due domande -
- Il flusso è sicuro?
- Quando crittografo il token, dovrei usare diversi IV e sale per ogni token? (La mia ipotesi è che sia necessario, ma vuol dire che dovrei memorizzare IV e Salt nel DB, e in realtà recuperarlo in ogni chiamata effettuata dal cliente - sembra abbastanza espansivo).