È sicuro utilizzare il seguente meccanismo di autorizzazione stateless tra un client (iOS e Android) e un server?
Registrati
-
Il client fornisce un'email e una password e salva la password di cancellazione sulla
Keychain
di iOS e utilizzando alcuni alternativa per Android. -
Il server controlla la potenza della password se è ritenuta abbastanza strong da essere creata dall'utente sul DB.
-
Il server genera
JWT token
e lo restituisce al client. Il token ha una scadenza di 15 minuti. -
Il client memorizza il token (magari su
Keychain
stesso) e lo include per ogni richiesta successiva sull'intestazioneAuthorization
. -
Per ogni richiesta, il server controlla il token fornito (controlla la firma e l'ora di scadenza). Se è ok, la richiesta viene elaborata, altrimenti viene restituito un
HTTP 401
.
Accedi
-
Quando il client riceve un
HTTP 401
dal server significa che è richiesto un accesso. Quindi l'app accede aKeychain
e ottiene l'email & password e la invia al server (non è necessario l'intervento dell'utente). -
Il server convalida le credenziali fornite e, se sono valide, ripeterà i passaggi Registrati da 3 a 5.
Grazie alla scadenza del token, se un token viene compromesso, sarà valido per un breve periodo di tempo.
Se un utente è connesso a più dispositivi e lei cambia la sua password da un dispositivo, gli altri dispositivi manterranno la registrazione solo per un breve periodo di tempo, ma la password di cancellazione memorizzata su Keychain
non sarà più valida. Quindi sarà richiesto un nuovo accesso manuale, che ritengo sia corretto.
Quali svantaggi vedi?
Ho pensato di utilizzare aggiorna il token procedura per evitare di archiviare la password chiara ma questo aggiunge complessità e altri svantaggi (ad esempio: come garantire che refresh token
sia usato una sola volta). E per quanto ho visto, la memorizzazione della password chiara su KeyChain
è abbastanza sicura:
Documentazione sui servizi KeyChain
Qual è il modo migliore mantenere le credenziali di accesso in iOS?
Ma ho anche visto altre domande che non consigliano di memorizzare password sul dispositivo.
Quindi mi piacerebbe sentire le opinioni degli altri su questo.