Autenticación de la aplicación móvil mediante UUID

1

Escribo código de back-end para aplicaciones móviles. Necesito escribir el código para la autenticación y la solución más simple y segura que se me ocurre es:

  • Cuando el usuario inicia sesión, el dispositivo envía nombre de usuario y contraseña al servidor
  • Si las credenciales son válidas, el servidor devuelve token
  • El usuario envía token con cada solicitud

Detalles sobre el token

  • En Java puedo crear el token como UUID (que se crea utilizando SecureRandom debajo del capó)
  • Escribo este token en la base de datos en la tabla users en la fila del usuario
  • En cada solicitud de aplicación móvil, hago SELECT ... FROM users WHERE token = ? y verifico si el usuario actual tiene permiso para realizar la operación
  • Periódicamente cambio token en la tabla users para que caduque el token anterior

¿Es lo suficientemente bueno?

Parece seguro, pero no soy un experto en seguridad, así que pensé que lo pediría aquí. No he visto esta solución antes y me pregunto por qué.

  • Alguien se quejaría del rendimiento debido a que golpea la base de datos cada vez, pero en la aplicación real, cada solicitud genera muchas consultas SQL, por lo que una más no debería ser un problema.
  • Alguien podría quejarse de UUID, pero se sabe que, por lo que sé, en Java UUID s es imposible de adivinar debido a la implementación de SecureRandom .

¿Esta solución es segura o hay agujeros que no pude ver?

    
pregunta guest 18.09.2018 - 15:40
fuente

1 respuesta

2

Tengo una preocupación principal con su configuración: ¡Debería marcar los tokens UUID! De lo contrario, si su base de datos pierde, todas las cuentas estarán expuestas. Dada la cantidad de entropía en un UUID generado de forma segura, una función hash simple como SHA-256 hará el trabajo.

Algunos puntos menores.

Usar un UUID como autenticación no es incorrecto desde una perspectiva de seguridad, siempre y cuando esté 100% seguro de que usa una fuente aleatoria segura (y el Javadoc parece estar de acuerdo con usted en eso). Para hacer el código más explícito, personalmente generaría el token directamente de la fuente aleatoria sin mezclar ningún UUID. Pero eso es principalmente para hacer el código más limpio.

Asegúrese de que está utilizando un UUID de la versión 4. Las otras versiones no son aleatorias!

Además, mantendría los tokens en una tabla separada y no en la tabla users . Pero eso es más sobre la normalización de la base de datos que sobre la seguridad.

Deberías pensar en cuándo vencen tokens. Si tiene algún tipo de función de cierre de sesión, el token debe caducar cuando el usuario cierre la sesión. De la misma manera, si el usuario cierra la sesión cuando se cierra la aplicación, el token debería caducar cuando se cierre.

    
respondido por el Anders 18.09.2018 - 15:53
fuente

Lea otras preguntas en las etiquetas