Estoy creando una aplicación web que debe funcionar sin conexión. El sistema está diseñado para capturar transacciones de ventas. La mayor parte de la parte "fuera de línea" es bastante sencilla: solo necesito almacenar datos localmente y sincronizarlos cuando vuelva a la red. Hasta aquí todo bien.Autenticación de usuario en aplicaciones web sin conexión
El problema es con la autenticación. La aplicación se ejecutará en una máquina compartida con una única cuenta de usuario del sistema operativo. Si estoy fuera de línea, ¿cómo autentico al usuario?
Los propios usuarios no tienen datos privados que deba segmentar (es decir, no tengo que protegerlos entre sí en el cliente). Necesito poder validar su contraseña para poder permitir el ingreso a diferentes usuarios durante el día, incluso si la conexión no funciona.
Un enfoque que estoy pensando implica el almacenamiento en caché de los hashes de contraseña en el lado del cliente en un IndexedDB. Solo un conjunto limitado de usuarios podrá iniciar sesión desde una máquina compartida específica, por lo que no necesitaré almacenar en caché toda la base de datos de contraseñas localmente. Suponiendo que tengo una buena política de contraseñas (requisitos de complejidad y caducidad) en su lugar y los hashes en sí mismos son seguros (bcrypt), ¿qué tan horrible de una idea es esta?
¿Tengo alguna otra opción?
Por lo que he leído, la expiración de la contraseña puede ser más dañina que útil: http://www.cryptosmith.com/node/218 Aunque, ese puede no ser el caso si estás exponiendo tu base de datos. –