Si quiero guardar el nombre de usuario y la contraseña para usar dentro de una aplicación de Android, ¿cuál es la mejor manera de hacerlo? ¿Es a través de la pantalla de preferencias (pero qué pasa si el usuario no ve esto?), O aparece un cuadro de diálogo y le pide al usuario las credenciales? Si es así, tengo que mantener el estado de la aplicación. ¿Cómo haría esto?Android: ¿Almacenamiento de nombre de usuario y contraseña?
Respuesta
La mayoría de las aplicaciones para Android y iPhone que he visto utilizan una pantalla inicial o un cuadro de diálogo para solicitar credenciales. Creo que es engorroso para el usuario tener que volver a ingresar su nombre/contraseña a menudo, por lo que el almacenamiento de esa información tiene sentido desde una perspectiva de usabilidad.
El asesoramiento de la (Android dev guide) es:
En general, se recomienda minimizar la frecuencia de pedir credenciales de usuario - para realizar ataques de suplantación de identidad más visible, y menos probable que tenga éxito. En su lugar, use un token de autorización y actualícelo.
Donde sea posible, el nombre de usuario y la contraseña no se deben almacenar en el dispositivo . En cambio, realice la autenticación inicial utilizando el nombre de usuario y la contraseña provistos por el usuario, y luego use un token de autorización específico del servicio de corta duración.
El uso del AccountManger es la mejor opción para almacenar credenciales. El SampleSyncAdapter proporciona un ejemplo de cómo usarlo.
Si esta no es una opción para usted por alguna razón, puede recurrir a las credenciales persistentes utilizando el mecanismo Preferences. Otras aplicaciones no podrán acceder a sus preferencias, por lo que la información del usuario no se expone fácilmente.
Yo diría que es Es arriesgado mantener la información de contraseñas tal como está en las preferencias. En los teléfonos rooteados, es posible acceder al archivo de preferencias de una aplicación. Lo menos que puedes hacer es ofuscar la contraseña. – Jayesh
Si alguien tiene su teléfono y es capaz de rootearlo, no hay mucho que pueda hacer para mantener sus datos seguros. No es una mala idea ofuscar la contraseña, pero en realidad no está agregando mucha más protección. Lo que es más importante es que hay muchas capas de seguridad ya integradas en el sistema operativo. Por supuesto, no quieres hacer nada estúpido para eludir esas medidas. Probablemente sea mejor usar un sistema como OAuth y almacenar un token en el dispositivo en lugar del nombre de usuario y la contraseña. – elevine
También vea esta pregunta [enlace] (http: // stackoverflow.com/questions/785973/what-is-the-most-appropriate-way-to-store-user-settings-in-android-application) – Diederik
También puede consultar la muestra SampleSyncAdapter del SDK. Puede ser de ayuda.
Eche un vistazo a What is the most appropriate way to store user settings in Android application si le preocupa almacenar contraseñas como texto claro en SharedPreferences.
Debe utilizar el Android AccountManager. Está especialmente diseñado para este escenario. Es un poco engorroso, pero una de las cosas que hace es invalidar las credenciales locales si la tarjeta SIM cambia, por lo que si alguien desliza su teléfono y arroja una nueva tarjeta SIM, sus credenciales no se verán comprometidas.
Esto también le brinda al usuario una manera rápida y fácil de acceder (y posiblemente eliminar) las credenciales almacenadas para cualquier cuenta que tengan en el dispositivo, todo desde un solo lugar.
SampleSyncAdapter (como @Miguel mencionado) es un ejemplo que hace uso de credenciales de cuentas almacenadas.
¿Dónde está documentado que AccountManager "invalidará las credenciales locales si la tarjeta SIM cambia"? – elevine
No es que yo sepa. Sin embargo, es algo que he llegado a creer/aceptar/entender después de que algunos usuarios de mi aplicación tuvieran problemas de autenticación después de los SIM Swaps. –
No lo veo en el código JavaDocs o AccountManager. Parece una buena característica, sería bueno verificarlo y comprender los detalles. – elevine
Creo que la mejor manera de asegurar su credencial es primero pensar en almacenar la Contraseña con cifrado en el archivo account.db que no podría estar fácilmente disponible en dispositivos no rooteados y en caso de dispositivo rooteado, el hacker debe necesitar la clave para descifrarlo
Otra opción es hacer toda su autenticación como lo hace Gmail. después de la primera autenticación con el servidor de Gmail. obtuviste el token de autenticación que se usaría en caso de tu contraseña. ese token se almacenaría en texto sin formato. Este token podría ser falso en caso de que cambie la contraseña del servidor.
la última opción Recomiendo habilitar la Autenticación de 2 factores & crear la Contraseña específica del dispositivo para su dispositivo. Después de perder el dispositivo, todo lo que necesita es deshabilitar ese dispositivo.
¿Puedes publicar una fuente que diga que accounts.db está encriptada? ¿O dice que la contraseña específica debe estar encriptada? –
@Riz, dónde almacenar la clave para el cifrado, entonces ... porque mi aplicación funciona sin Internet, por lo que no puedo obtenerla de la red – eRaisedToX
La información en http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html es un enfoque bastante pragmático, pero basado en "uses-hidden-android-apis". Es algo a tener en cuenta cuando realmente no puede evitar almacenar credenciales/contraseñas localmente en el dispositivo.
También he creado una esencia limpia de esa idea en https://gist.github.com/kbsriram/5503519 que podría ser útil.
Eche un vistazo a esta publicación de desarrolladores de Android, que podría ayudar a aumentar la seguridad de los datos almacenados en su aplicación de Android.
Con el nuevo (Android 6.0) de hardware de huellas digitales y API puede hacerlo como en this aplicación de ejemplo GitHub.
El proyecto de ejemplo referenciado crea una clave en Android Key Store y la usa para crear un cifrado cifrado la contraseña. La contraseña y el cifrado cifrados se almacenan como cadenas codificadas en base64 en las preferencias compartidas. Tras la autenticación exitosa de huellas dactilares, la clave secreta se recupera del Android Key Store y se utiliza con el cifrado descifrado para descifrar la contraseña decodificada. – mjwheat
@mjwheat Esto es muy útil para entender lo que está sucediendo en el ejemplo. ¡Gracias! Un pequeño error tipográfico: "... descifrar la contraseña codificada". – muetzenflo
Éstos se encuentran en orden de dificultad para romper su información oculta.
tienda en texto plano
almacén cifrado con una clave simétrica
Uso de Android Keystore
almacén cifrado con claves asimétricas
fuente: Where is the best place to store a password in your Android app
La propia Keystore se encripta utilizando el propio pin/contraseña de la pantalla de bloqueo del usuario, por lo tanto, cuando la pantalla del dispositivo está bloqueada, la Keystore no está disponible. Tenga esto en cuenta si tiene un servicio en segundo plano que podría necesitar acceder a los secretos de su aplicación.
fuente: Simple use the Android Keystore to store passwords and other sensitive information
- 1. Almacenamiento de nombre de usuario/contraseña en Mac usando Java
- 2. Comprobando el nombre de usuario y la contraseña en Android
- 3. ¿Suplantar con nombre de usuario y contraseña?
- 4. nombre de usuario y contraseña en sqlite3
- 5. TeamCity Nombre de usuario/contraseña
- 6. Cómo almacenar mejor la información de usuario y el nombre de usuario y la contraseña
- 7. Seguridad de nombre de usuario y contraseña de ASMX
- 8. Mercurial (HG) parámetros de extracción: nombre de usuario y contraseña
- 9. gvfs-mount especificar nombre de usuario contraseña
- 10. Curl para solicitar un nombre de usuario y contraseña
- 11. Enviar nombre de usuario y contraseña al servicio web
- 12. ¿Utiliza cURL con nombre de usuario y contraseña?
- 13. Servidor VisualSVN quiere un nombre de usuario y contraseña
- 14. WCF TransportCredentialOnly no enviar nombre de usuario y contraseña
- 15. Autenticación Java LDAP con nombre de usuario y contraseña
- 16. Salida diferente, mismo nombre de usuario y contraseña
- 17. Pasando nombre de usuario y contraseña a svcutil.exe?
- 18. android get gmail nombre de usuario y contraseña del administrador de la cuenta
- 19. La mejor opción para almacenar nombre de usuario y contraseña en la aplicación de Android
- 20. Cómo usar AndroidHttpClient (nivel de API 8) y contraseña de contraseña de nombre de usuario?
- 21. Android: ¿dónde deberíamos guardar el nombre de usuario y la contraseña en la memoria del dispositivo?
- 22. Cambiar nombre de usuario y contraseña en CouchDB _base de datos de usuario
- 23. Base de datos + Autenticación de Windows + Nombre de usuario/Contraseña?
- 24. Modo de servidor HSQLDB nombre de usuario/contraseña
- 25. Seguridad más allá de un nombre de usuario/contraseña?
- 26. LDAP - ¿Cómo verificar una combinación de nombre de usuario/contraseña?
- 27. Autenticación de Windows solicita nombre de usuario/contraseña
- 28. Quitar el nombre de usuario SVN y la contraseña de Eclipse no funciona en Windows 7
- 29. Almacenar la contraseña por separado desde el nombre de usuario
- 30. mysql connect - ¿el nombre de usuario/contraseña debe estar codificado?
http://stackoverflow.com/a/786588/1166727 Checa lo @RetoMeier (Líder Técnico para el Desarrollo de Android en Google) tiene que decir acerca de esto. –
Si está buscando la forma más segura de almacenar las credenciales.Lea esta respuesta http://stackoverflow.com/a/20560574/730807 –
@Legend ¿Cómo resolvió su problema? – Erum