Se voglio memorizzare il nome utente e la password da utilizzare all'interno di un'applicazione Android, qual è il modo migliore per farlo? È attraverso la schermata delle preferenze (ma cosa succede se l'utente lo manca?), O fa apparire una finestra di dialogo e chiede all'utente le credenziali? Se è così, devo mantenere lo stato per l'applicazione. Come lo farei?Android: memorizzando nome utente e password?
risposta
La maggior parte delle app per Android e iPhone che ho visto utilizzano una schermata iniziale o una finestra di dialogo per chiedere le credenziali. Penso che sia difficile per l'utente dover reinserire il proprio nome/password spesso, quindi archiviare tali informazioni ha senso dal punto di vista dell'usabilità.
Il parere del (Android dev guide) è:
In generale, si consiglia di ridurre al minimo la frequenza di chiedere per l'utente credenziali - per rendere gli attacchi di phishing più cospicua, e meno probabilità di avere successo. Utilizzare invece un token di autorizzazione e aggiornarlo.
Ove possibile, nome utente e password non devono essere memorizzati sul dispositivo . Eseguire invece l'autenticazione iniziale utilizzando il nome utente e la password forniti dall'utente e quindi utilizzare un token di autorizzazione specifico del servizio di breve durata.
L'utilizzo di AccountManger è l'opzione migliore per l'archiviazione delle credenziali. Il SampleSyncAdapter fornisce un esempio di come usarlo.
Se questa non è un'opzione per qualche motivo, è possibile ricorrere alle credenziali persistenti utilizzando il meccanismo Preferences. Altre applicazioni non saranno in grado di accedere alle tue preferenze, quindi le informazioni dell'utente non saranno facilmente esposte.
Direi che è rischioso di mantenere le informazioni sulla password come nelle preferenze. Sui telefoni rooted è possibile accedere al file delle preferenze di un'app. Il minimo che puoi fare è offuscare la password. – Jayesh
Se qualcuno ha il tuo telefono ed è in grado di eseguirne il root, non c'è molto che sarai in grado di fare per mantenere i tuoi dati al sicuro. Non è una cattiva idea quella di offuscare la password, ma in realtà non aggiunge molta più protezione. Ciò che è più importante è che ci sono molti livelli di sicurezza già integrati nel sistema operativo. Certo, non vuoi fare nulla di stupido per eludere queste misure. Probabilmente è meglio usare un sistema come OAuth e memorizzare un token sul dispositivo al posto del nome utente e della password. – elevine
Vedi anche questa domanda [collegamento] (http: // stackoverflow.it/questions/785973/what-is-the-most-appropriate-way-to-store-user-settings-in-android-application) – Diederik
È anche possibile guardare l'esempio SampleSyncAdapter dall'SDK. Potrebbe aiutarti.
Dai uno sguardo allo What is the most appropriate way to store user settings in Android application se sei preoccupato di memorizzare le password come testo in chiaro in SharedPreferences.
È necessario utilizzare l'Android AccountManager. È costruito appositamente per questo scenario. È un po 'ingombrante ma una delle cose che fa è invalidare le credenziali locali se la SIM card cambia, quindi se qualcuno fa scorrere il tuo telefono e getta una nuova SIM, le tue credenziali non saranno compromesse.
Questo fornisce all'utente un modo semplice e veloce per accedere (e potenzialmente eliminare) le credenziali memorizzate per qualsiasi account sul dispositivo, tutto da un'unica posizione.
SampleSyncAdapter (come @Miguel menzionato) è un esempio che utilizza le credenziali dell'account memorizzate.
Dove è documentato che AccountManager "invalida le credenziali locali se la scheda SIM cambia"? – elevine
Non è che ne sia a conoscenza. Tuttavia, è qualcosa che ho iniziato a credere/accettare/comprendere dopo che alcuni utenti della mia app hanno avuto problemi di autenticazione a seguito di scambi di SIM. –
Non lo vedo nel codice JavaDocs o AccountManager. Sembra una buona caratteristica, sarebbe solo bello verificarlo e capire i dettagli. – elevine
Penso che il modo migliore per proteggere le credenziali è pensare prima di memorizzare la password con crittografia nel file account.db che non potrebbe essere facilmente disponibile in dispositivi non rooted e in caso di dispositivo rootato che l'hacker deve aver bisogno la chiave per decodificarlo.
Un'altra opzione è fare tutta la tua autenticazione come il modo in cui Gmail sta facendo. dopo la prima autenticazione con il server Gmail. hai il token di autenticazione che verrebbe utilizzato in caso di password. quel token sarebbe archiviato in testo normale. Questo token potrebbe essere falso nel caso in cui si cambi la password da Server.
l'ultima opzione che consiglio di abilitare l'autenticazione a 2 fattori & creare la password specifica del dispositivo per il dispositivo. Dopo aver perso il dispositivo, tutto ciò che serve è disattivare quel dispositivo.
Puoi pubblicare una fonte che dice che accounts.db è crittografato? O dici che la password specifica dovrebbe essere crittografata? –
@Riz, dove archiviare la chiave per la crittografia, quindi ... perché la mia app funziona senza Internet, quindi non posso ottenerla dalla rete – eRaisedToX
Le informazioni su http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html sono un approccio abbastanza pragmatico, ma "usa-nascosto-android-apis". È qualcosa da prendere in considerazione quando non è possibile aggirare le credenziali/password localmente sul dispositivo.
Ho anche creato una sintesi di quell'idea al https://gist.github.com/kbsriram/5503519 che potrebbe essere utile.
Dai un'occhiata a questo post degli sviluppatori di android, che potrebbe aiutare ad aumentare la sicurezza dei dati memorizzati nella tua app Android.
Con la nuova (Android 6.0) hardware di impronte digitali e API si può fare come in this applicazione di esempio github.
Il progetto di esempio di riferimento crea una chiave nell'archivio chiavi di Android e la usa per creare un codice crittografato la password. La password e il codice cifrato vengono memorizzati come stringhe codificate in base 64 nelle preferenze condivise. Dopo aver eseguito con successo l'autenticazione tramite impronta digitale, la chiave segreta viene recuperata da Android Key Store e utilizzata con il codice decodificato per decrittografare la password decodificata. – mjwheat
@mjwheat questo è così utile per capire cosa sta succedendo nell'esempio. Grazie! Un piccolo refuso: "... per decodificare la password codificata." – muetzenflo
Questi sono classificati in ordine di difficoltà per interrompere le informazioni nascoste.
Conservare in chiaro
archivio crittografato utilizzando una chiave simmetrica
Utilizzando la Keystore Android
archivio crittografato utilizzando chiavi asimmetriche
fonte: Where is the best place to store a password in your Android app
Il Keystore stesso è crittografato utilizzando il proprio pin/password lockscreen dell'utente, quindi, quando lo schermo del dispositivo è bloccato, il Keystore non è disponibile. Tienilo a mente se hai un servizio in background che potrebbe aver bisogno di accedere ai tuoi segreti applicativi.
fonte: Simple use the Android Keystore to store passwords and other sensitive information
- 1. Verifica nome utente e password in Android
- 2. TeamCity Nome utente/password
- 3. android get gmail nome utente e password dal gestore account
- 4. Modifica nome utente e password dell'account personalizzato Android
- 5. Verifica nome utente e password dell'account Windows
- 6. Sicurezza nome utente e password ASMX
- 7. Impersonare con nome utente e password?
- 8. JOptionPane con nome utente e immissione password
- 9. Passando nome utente e password a svcutil.exe?
- 10. Memorizza password separatamente dal nome utente
- 11. git: forza richiesta utente e password
- 12. WCF - BasicHttpBinding, non sono disponibili nome utente e/o password, nome: null, password: null
- 13. Sicurezza oltre un nome utente/password?
- 14. Modifica nome utente/password predefiniti in RockMongo
- 15. Nome utente dell'API Google Drive + autenticazione password
- 16. Database + Autenticazione di Windows + Nome utente/password?
- 17. Autenticazione Windows richiede nome utente/password
- 18. Come impostare nome utente/password in httpget
- 19. Scaricare un file con password e nome utente con C#
- 20. Usa nome utente/password con git e bitbucket
- 21. Applicazione semplice per nome utente e password in Python
- 22. Come specificare nome utente e password sul docker push?
- 23. Come passare nome utente e password nell'API REST di TeamCity
- 24. Utilizzo di Xamarin.Auth per l'autenticazione OAuth2: nome utente e password?
- 25. Come rendere Egit ricordare password e nome utente?
- 26. Git Push - Nome utente e password nell'URL remoto
- 27. Modifica nome utente e password del server proxy fiddler
- 28. Come salvare nome utente e password in git
- 29. controlla unix nome utente e password in uno shellscript
http://stackoverflow.com/a/786588/1166727 Controlla per cosa (piombo Tech per lo sviluppo Android di Google) @RetoMeier ha da dire su questo. –
Se stai cercando il modo più sicuro per archiviare le credenziali. Leggi questa risposta http://stackoverflow.com/a/20560574/730807 –
@Legenda come hai risolto il problema? – Erum