Tengo una aplicación web que incluye sitios web de terceros en iframes. Los sitios web de terceros requieren que el usuario inicie sesión en ellos. La opción A es requerir que el usuario inicie sesión en cada sitio web de forma individual a través de iframes y confíe en las cookies para recordar al usuario. Sin embargo, eso es bastante incómodo y algunos usuarios definitivamente preferirían un inicio de sesión para todos los sitios web, así que esa es mi opción B:
Se basa casi totalmente en la seguridad y el cifrado de la interfaz.
Primero, almacenando la contraseña. Cada usuario tiene una contraseña (contraseña principal) para mi aplicación web. La contraseña, además de ser utilizada para iniciar sesión en mi sitio web, también se usaría para cifrar las credenciales de los usuarios de los sitios web de los usuarios. Por lo tanto, las credenciales se cifran con la contraseña principal de mi servidor y solo el usuario puede descifrarlas. Aquí es donde tengo una pregunta, ¿necesitaría simplemente cifrarla usando solo la contraseña, o algunas claves secretas mágicas o algunas cosas podrían usarse para fortalecer el cifrado?
Proceso general:
- El usuario inicia sesión en mi aplicación web.
- La contraseña principal se almacena en la memoria del navegador para un uso posterior
-
Extraer credenciales cifradas del servidor y descifrarlas en el frontend, usando la contraseña principal
-
las credenciales desencriptadas se almacenan en la memoria del navegador
-
abra el iframe de inicio de sesión y envíe las credenciales mediante postMessage al inicio de sesión iframe (incluye validación de origen)
-
iniciar sesión automáticamente (tengo un complemento de integración para los sitios, eso es por qué podría hacerlo).
Tenga en cuenta que iniciar sesión en la aplicación web y descifrar las credenciales son 2 procesos diferentes. Si el usuario actualiza el sitio web, aún está conectado, no puede acceder a las credenciales. Se le pedirá la contraseña de nuevo. Eso no es un problema, ya que la sesión de sitios web de terceros será recordada por el navegador de todos modos.
Por lo tanto, los datos del frontend estarían protegidos de iframes por la seguridad web y siempre que me asegure de que no haya sumideros XSS en la aplicación web, no hay forma de que estas contraseñas estén filtrándose, ¿verdad? Incluso si el servidor estaba comprometido.
La única forma en que lo veo, si el servidor se vio comprometido y alguien editó el código de la interfaz para que sea malicioso y capture las contraseñas. Pero eso es algo que siempre sería peligroso, incluso si no implementara el inicio de sesión automático en absoluto.
Solo quiero tu opinión si es una forma segura de almacenar y usar contraseñas y lo que podría salir mal. Especialmente, ¿es seguro almacenar contraseñas en la memoria de javascript y cómo cifrar las credenciales? Use solo la contraseña del usuario o tal vez agregue un token secreto a esa contraseña (no sé si eso tiene sentido). Cualquier cosa que lo haga más seguro. Cualquier ayuda apreciada.