Actualmente estoy trabajando en un servicio web RESTful con Java que utilizan los dispositivos móviles, es decir, Android e iOS, usando un marco que me permite abstraerme de ambos. Estoy agregando esta información porque significa que estoy ligeramente limitado cuando se trata del uso de marcos que podrían ayudar con la seguridad.
Lo que estoy haciendo actualmente es lo siguiente:
El cliente tiene la contraseña almacenada en texto sin formato en un archivo interno de la aplicación. Eso es porque necesito enviar el nombre de usuario y la contraseña con cada solicitud - > Sosegado. Se transmite a través del encabezado de autorización HTTP como nombre de usuario: contraseña codificada en Base64. La transmisión se realiza a través de HTTPS. El servidor decodifica el nombre de usuario + contraseña y calcula un hash a partir de la contraseña que luego verifica con un hash para ese usuario en la base de datos. He tomado el algoritmo de hash y el código de aquí y here .
Mis suposiciones:
- Si asumo que el propio cliente no se ha comprometido, esto debería ser seguro.
- Si alguien obtiene acceso a la base de datos del servidor, los usuarios deberían estar seguros porque las contraseñas están ocultas.
- Puedo transmitir las contraseñas al servidor en texto sin formato (Base64), porque la transmisión en sí misma está protegida a través de HTTPS.
Solo estoy trabajando en este proyecto en mi tiempo libre, lo que significa que no quiero dedicar demasiado tiempo solo a la seguridad y, como es solo un juego, secuestrar una cuenta tampoco sería tan crítico. Sin embargo, todavía me gustaría tener un mecanismo de autenticación robusto.
Mis preguntas:
- ¿Son correctas mis suposiciones?
- ¿Cómo sería posible comprometer mi enfoque actual?
- ¿Qué podría hacer para mejorar la seguridad?