|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Contraseña de usuario
Hola a tod@s,
estoy realizando mi primera aplicación en Android y tengo un problema con el tema 'Usuario y contraseña'. La aplicación tiene parte de servidor, que es el que se encarga de persistir en una bd MySQL. Mi pregunta es, ¿como gestiono el tema contraseña? traducido a varias preguntas: 1. Es correcto guardar una contraseña (encriptada de alguna forma obviamente) en la BD? 2. Como guardo la contraseña en el teléfono para que no tenga que logearse cada vez el usuario? Gracias a tod@s! |
|
#2
|
||||
|
||||
Lo habitual es usar un sistema de Access token, es decir, haces un sistema que al logearte te de una cadena de caracteres que identifique al usuario, y que sea válida durante un tiempo (por ejemplo 1 semana o 1 mes), esto se llama Token de Sesión.
Además del Token de Sesión también le envías al usuario un Refresh Token (o Token de Renovación), que se usa para renovar el Token de Sesión cuando este ha caducado. Por ejemplo, te logeas, y al usuario le envías: AccessToken = "aaaa" RefreshToken = "bbbb" A partir de ese momento para todo el tráfico con el servidor usas el AccessToken en vez del usuario y contraseña, ya que ese AccessToken identifica un login válido. Cuando el AccessToken caduca vuelves a relogearte, pero en vez de usando el usuario y contraseña usando el AccessToken y el RefreshToken y al usuario le envías: AccessToken = "cccc" RefreshToken = "dddd" Haciendo esto lo único que tienes que tener almacenado en tu app en todo momento es el AccessToken y el RefreshToken. |
Gracias de parte de: | ||
#3
|
||||
|
||||
Respecto al 2, busca y encontrarás: http://www.htcmania.com/showthread.php?t=952584 (EDITO: es lo que comentaba kriogeN
![]() Respecto a almacenar la contraseña en el servidor, no es la práctica habitual, y de hecho es pecado guardarla en claro aunque muchos lo hagan. Tampoco se almacena cifrada, lo que se almacena es un "hash" de la contraseña. Un hash es una función que a la misma entrada devuelve siempre la misma salida, pero conociendo la salida es imposible averiguar la entrada salvo probando distintas entradas (fuerza bruta, diccionarios, etc.) a ver si coincide la salida. Ejemplos, MD5 o SHA-1 Así, envías las credenciales al servidor (sea la contraseña, o el token, o lo que sea que pruebe que es el usuario), el servidor hace el hash y comprueba si en la base de datos es lo mismo. Si te atacan la base de datos, las credenciales no quedan expuestas como si estuvieran guardadas en texto plano o cifradas -si consiguieran a clave de cifrado podrían acceder a todas las contraseñas- P.D: Poniéndose en modo paranoico (esto ya por si le interesa a alguien ![]()
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
Gracias de parte de: | ||
#4
|
||||
|
||||
Gracias por vuestras respuestas.
Algo había leído sobre lo que comentáis, tanto sobre los tokens como sobre lo de MD5 o SHA1 (a esto me refería con lo de cifrada). A ver si me ha quedado claro. Guardar el hash en MySQL también es pecado o no tanto? Entiendo que lo ideal es lo de los tokens pero lo veo más complicado para una primera aproximación (también es un poco de pereza, vamos a reconocerlo), lo pongo como futura mejora ![]() Un saludo |
#5
|
||||
|
||||
Guardar el hash en la base de datos es lo correcto. Guardarla en claro o cifrada no.
Edit: La pereza en temas de seguridad hay que guardarla. No por tu app, que al fin y al cabo puedes no tener nada comprometedor, pero ya sabemos que mucha gente usa la misma contraseña para todo. Si le pides email y contraseña y luego la mandas en claro o la almacenas... igual le haces la pascua al usuario si alguien intercepta el tráfico de tu app o accede a la base de datos.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Última edición por mocelet Día 14/05/15 a las 13:19:52. |
Gracias de parte de: | ||
![]() |
![]() |
||||||
|