Estaba revisando los documentos de Oauth2 y pensé que era un tipo de seguridad permisiva, así que intenté implementar tokens JWT con un esquema especial como el de la imagen para una aplicación móvil que se comunica con una API web.
Notas: no me gustó la idea de tokens de actualización de Oauth2, ya que podrían ser robados y permitir el uso paralelo (por usuarios legítimos y maliciosos) a menos que implemente la detección de robo girándolos (refrescando el token de actualización en cada solicitud) en este caso, ¿por qué los usa? en absoluto?
Cómo funciona el flujo de autenticación:
- Un usuario que inicia sesión con credenciales obtiene un jwt de 20 minutos de duración.
- Al expirar, el jwt se actualiza presionando la base de datos si está en la lista negra (reiniciar sesión) y, si no, verifica si se usó para generar un nuevo token.
- Si nunca se usó para actualizar, se acepta y se usa para emitir un token de acceso de bajo grado.
- Si el token se usó antes, o si tenía un cliente + dispositivo + usuario diferente al de su padre, ofrezca una verificación de credenciales (contraseña o código de bloqueo de pantalla)
- Si se aprueba, esta verificación emite un nuevo token de primer grado que enumera a todos sus padres e hijos en la base de datos, es como un nuevo inicio de sesión de primer usuario.
- Si falla la pantalla de bloqueo, al usuario se le presenta una pantalla de inicio de sesión.
Las preguntas son:
- ¿Cuáles son los posibles agujeros de seguridad? (Encontré dos casos de uso: el token de acceso válido robado dura 20 minutos, el mismo problema que los tokens de Oauth. No hay pérdida aquí. Y el token de inactividad robado: el usuario no ha iniciado sesión durante, por ejemplo, 7 días; el token se roba y se usa hasta que el usuario vuelva a iniciar sesión o la cadena de fichas se revoca después de 3 meses de persistencia, nuestra política, y este robo tiene pocas posibilidades ya que la señal debe ser interceptada en la última solicitud que el usuario hace en la aplicación, más delgada que robar una ficha de actualización de Oauth2)
- ¿Cuáles son los problemas de experiencia de usuario que un atacante puede causar en la aplicación mientras está en este esquema?