Android: ¿almacena nombre de usuario y contraseña?

Si quiero almacenar 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?

La mayoría de las aplicaciones para Android y iPhone que he visto usan 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 consejo de la ( guía de desarrollo de Android ) es:

En general, recomendamos minimizar la frecuencia de solicitud de credenciales de usuario: para hacer que los ataques de phishing sean más evidentes y menos probables de tener é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 su lugar, realice la autenticación inicial utilizando el nombre de usuario y la contraseña proporcionados por el usuario, y luego use un token de autorización de servicio específico de corta duración.

El uso de AccountManger es la mejor opción para almacenar credenciales. SampleSyncAdapter proporciona un ejemplo de cómo usarlo.

Si esta no es una opción para usted por algún motivo, puede recurrir a las credenciales persistentes mediante el mecanismo de Preferencias . Otras aplicaciones no podrán acceder a sus preferencias, por lo que la información del usuario no se expone fácilmente.

Deberías usar 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 forma 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 cuenta almacenadas.

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 el caso de un dispositivo rooteado, el hacker debe necesitar la clave para descifrar eso.

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 que recomendaría para habilitar la Autenticación de 2 factores y crear una Contraseña específica del dispositivo para su dispositivo. Después de perder el dispositivo, todo lo que necesita es deshabilitar ese dispositivo.

Eche un vistazo a ¿Cuál es la forma más adecuada de almacenar la configuración del usuario en la aplicación de Android si le preocupa almacenar contraseñas como texto sin formato en SharedPreferences.

También puede ver el ejemplo SampleSyncAdapter del SDK. Puede ser de ayuda.

Eche un vistazo a esta publicación de desarrolladores de Android, que podría ayudar a boost la seguridad de los datos almacenados en su aplicación de Android.

Usar criptografía para almacenar credenciales de forma segura

Con el nuevo hardware de huellas dactilares (Android 6.0) y la API, puedes hacerlo como en esta aplicación de ejemplo github.

Estos se clasifican por orden de dificultad para romper su información oculta .

  1. Almacenar en texto plano

  2. Tienda encriptada usando una clave simétrica

  3. Usando la Tienda de claves de Android

  4. Almacenar encriptado usando claves asimétricas

fuente: ¿Dónde está el mejor lugar para almacenar una contraseña en su aplicación de Android

El Keystore en sí mismo está encriptado usando el pin / contraseña de la pantalla de locking del usuario, por lo tanto, cuando la pantalla del dispositivo está bloqueada, 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: uso simple de Android Keystore para almacenar contraseñas y otra información sensible

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 creé una idea limpia de esa idea en https://gist.github.com/kbsriram/5503519 que podría ser útil.