Dovresti utilizzare un'API Web per consentire una modifica della password sul server e attivare tale API dall'app. In questo modo, l'utente dovrebbe essere in grado di cambiare la propria password dall'app e mentre è connesso al server. Ma la password dell'utente non deve essere utilizzata per crittografare direttamente il database ma solo per crittografare una chiave (grande e casuale). Il flusso di lavoro generale potrebbe essere:
- l'utente chiede una modifica della password sull'app
- l'app chiede la vecchia e la nuova password
L'app - conferma la vecchia password con il server tramite una connessione sicura (SSL crittografata) - opzionale
- app chiede al server di cambiare la password assegnando i vecchi e i nuovi su una connessione sicura
- l'app decodifica la chiave del database con la vecchia password
L'app - codifica la chiave del database con la nuova password e la salva nella memoria permanente
In questo modo l'esperienza utente è corretta perché ha dichiarato la sua password una sola volta e l'app e il server sono ancora sincronizzati.
Sfortunatamente, questo è solo un flusso di lavoro generale, perché anche se è immune da un errore di connessione iniziale (semplicemente mantenendo la vecchia password se il server non può cambiarlo), il caso peggiore sarebbe se il server potesse cambiare la sua password ma perdere la connessione prima di riconoscerla all'app. Come al solito, il diavolo è nascosto nei dettagli del caso peggiore e il protocollo effettivo dovrebbe garantire che entrambi i lati tornino allo stato precedente se si verifica un problema prima della fine.