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é sucede si el usuario se pierde esto?) O aparece un cuadro de diálogo y le pregunta al usuario las credenciales? Si es así, tengo que mantener el estado de la aplicación. ¿Cómo haría esto?
android
authentication
storage
credentials
Leyenda
fuente
fuente
Respuestas:
La mayoría de las aplicaciones de 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 almacenar esa información tiene sentido desde una perspectiva de usabilidad.
El consejo de la ( guía de desarrollo de Android ) es:
Usar el 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 de Preferencias . Otras aplicaciones no podrán acceder a sus preferencias, por lo que la información del usuario no se expone fácilmente.
fuente
AccountManager
(según mi respuesta, y @ Miguel's de forma indirecta) y alguien obtiene su teléfono GSM, deberá seguir usando su SIM para tener acceso a sus cuentas, ya que invalidará las credenciales almacenadas cuando cambia la SIM.Deberías usar el AccountManager de Android . 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 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 potencialmente eliminar) las credenciales almacenadas para cualquier cuenta que tengan en el dispositivo, todo desde un solo lugar.
SampleSyncAdapter (como mencionó @Miguel) es un ejemplo que utiliza las credenciales de la cuenta almacenada.
fuente
Creo que la mejor manera de asegurar su credencial es pensar primero en almacenar la Contraseña con encriptación 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 está haciendo 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, le recomendaría que habilite la autenticación de 2 factores y cree una contraseña específica para su dispositivo. Después de perder el dispositivo, todo lo que necesita es desactivar ese dispositivo.
fuente
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 cifrar en SharedPreferences?
fuente
También puede ver la muestra SampleSyncAdapter del SDK. Te puede ayudar.
fuente
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.
Uso de criptografía para almacenar credenciales de forma segura
fuente
Con el nuevo hardware y API de huellas digitales (Android 6.0) puede hacerlo como en esta aplicación de muestra de github.
fuente
Estos se clasifican en orden de dificultad para romper su información oculta .
Almacenar en texto sin cifrar
Almacenar encriptado con una clave simétrica
Usando el Android Keystore
Almacenar encriptado usando claves asimétricas
fuente: ¿Dónde está el mejor lugar para almacenar una contraseña en su aplicación de Android?
fuente: uso simple del almacén de claves de Android para almacenar contraseñas y otra información confidencial
fuente
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 "usa-hidden-android-apis". Es algo a tener en cuenta cuando realmente no puede evitar el almacenamiento local de credenciales / contraseñas en el dispositivo.
También he creado una idea general de esa idea en https://gist.github.com/kbsriram/5503519 que podría ser útil.
fuente