Como muchas API proporcionan acceso remoto a sus datos a través de la combinación usuario/contraseña, me preguntaba cuál era la mejor manera de almacenar esos valores, de manera altamente segura (incluso si el 100% es imposible), para conectarlos directamente sin preguntar siempre por esos.Inicio de sesión de cliente: cómo almacenar credenciales de forma segura en el lado del cliente?
Respuesta
recomiendo uno de los tres enfoques:
Evite guardar la contraseña en absoluto mediante el uso de tokens de autenticación. En este modelo, el usuario inicia sesión una vez y el servidor genera un token único, grande y escaso que el cliente puede almacenar y usar como su "contraseña" de inicio de sesión. El servidor solo acepta este token de un cliente a la vez, por lo que si dos clientes intentan usarlo simultáneamente, el token se invalida. El token generalmente también se invalida después de un período de tiempo (1 semana, 2 semanas, un año, lo que sea apropiado). Cuando el token se invalida, el usuario debe iniciar sesión nuevamente a mano y el proceso se repite. Este es básicamente el enfoque de Gmail y otros inicios de sesión similares en el sitio web.
Si debe almacenar la contraseña, le recomiendo confiar en que el sistema operativo la administre. Windows y Mac tienen buenos sistemas de almacenamiento seguros (DPAPI y Keychain, respectivamente). Sin embargo, Linux no tiene una buena solución siempre disponible, por lo que depende de su mercado. La ventaja de utilizar el sistema operativo es que el sistema operativo puede proporcionar protecciones que usted mismo no puede proporcionar, y el usuario puede administrar de forma centralizada la protección general del almacenamiento del sistema operativo (usando tarjetas inteligentes, etc.) a un nivel que probablemente no reproducirá. Las tiendas seguras de OS también suelen ser bastante convenientes para el usuario.
Si ninguna de estas son opciones, guarde un archivo cifrado con una contraseña maestra que el usuario debe ingresar cada vez que inicie su aplicación. Así es como funciona Firefox (o al menos lo hizo la última vez que miré, que ha sido un tiempo). Esto es razonablemente seguro, pero mucho menos conveniente para el usuario (y la baja conveniencia a menudo significa baja adopción por parte de los usuarios, o uso deficiente a través de contraseñas más simples, etc.). Investigaría el código de Firefox como un ejemplo de cómo implementar esto.
La mejor manera sería confiar en otra persona para almacenarlos y confiar en esa parte en su lugar. Pero si debe tener el control, le sugiero que lea un buen libro sobre sistemas seguros y luego piense de nuevo. Hay muchas variables a considerar y la mayoría de las veces solo mitiga el riesgo versus el costo.
- 1. Cómo almacenar credenciales de manera segura por sesión en Flask
- 2. tratando de forma segura las "sesiones" del cliente en PHP
- 3. Inicio de sesión de cliente de cliente con authlogic
- 4. Frameworks para almacenar datos del lado del cliente
- 5. Cookies solo del lado del cliente
- 6. Sesiones del lado del cliente
- 7. Caché del lado del cliente en GWT
- 8. Registradores en el lado del cliente GWT
- 9. del lado del cliente Secure autenticación de usuario couchApp/couchdb
- 10. ¿Cuál es la forma más segura de pasar argumentos del lado del servidor PHP al lado del cliente?
- 11. Idiomas del lado del cliente
- 12. Validación del lado del cliente de Grails
- 13. Definir los tipos de transporte en el lado del cliente
- 14. Persistencia del lado del cliente (almacenamiento)
- 15. caché de archivos del lado del cliente
- 16. Validación del lado del cliente de FluentValidation
- 17. Servidor HTTP NodeJS - ¿Cómo verificar la IP del cliente y el inicio de sesión?
- 18. MVC3 CompareAttribute, error del lado del cliente
- 19. Gestión del tiempo de espera de la sesión en el lado del cliente
- 20. Valora contraseñas hash en el lado del cliente
- 21. Caché de imagen del lado del cliente con ASP.Net
- 22. Método del lado del servidor y del lado del cliente
- 23. GWT "base de datos" (lado del cliente)
- 24. Acceso a MongoDB en el lado del cliente usando JavaScript
- 25. Generar certificados del lado del cliente en el navegador y iniciar sesión en el servidor
- 26. ¿Cómo administro la sesión de usuario actual en el lado del cliente?
- 27. Cómo almacenar archivos de forma segura en el servidor
- 28. Proporcionar las credenciales de forma segura a una API RESTANTE
- 29. cómo almacenar datos temporales en el lado del cliente y luego enviarlo al servidor
- 30. Administración de Dependencia del lado del cliente en CoffeeScript
¿Cuáles son algunas soluciones posibles si está utilizando Linux como su sistema operativo? – artgon
@artgon, recuerde que la primera regla de un almacenamiento seguro de contraseñas es que el usuario debe eventualmente autenticarse escribiendo una contraseña o presentando un token. Si encuentra una solución que no lo requiere, entonces ha encontrado una solución insegura. Dicho eso, las cosas que se deben mirar son GNOME Keyring, pwsafe y keystorage.net (para mono). De ellos, probablemente comenzaría con GNOME Keyring. –
Gracias por esta gran respuesta @RobNapier Una pregunta: ¿cómo podemos verificar si dos clientes están tratando de usar un token al mismo tiempo? –