Context:
Tengo dos servidores web ServerA (pila LAMP) y ServerB (pila ASP.NET). Creo que la tecnología (con suerte) no importa. Ambos servidores requieren autenticación y, supuestamente, hacen bien su trabajo, si no está fuera de alcance en esta pregunta.
Tarea:
Me gustaría implementar una página con contenido iframe. ServerA sirve el contenido externo ServerB sirve el contenido interno (el iframe). Los servidores están en el dominio diferente . Cuando el usuario X se registra en el Servidor A y navega a la página, me gustaría mostrar un personal y contenido sensible proveniente del ServidorB en el iframe. El contenido pertenece a la identidad del usuario X en el servidor B.
Solución propuesta:
- ServerA y ServerB tienen un secreto compartido (lado del servidor)
- Los usuarios se replican de ServerA a ServerB. Los nombres de usuario coinciden, las contraseñas en ServerB se generan aleatoriamente y no se usan en absoluto. (sigue leyendo)
- ServerA autentica al usuario a través de https usando una autenticación basada en formularios
- La página externa contiene el siguiente html fragement donde la extensión .any en la url está configurada para ejecutarse y responder en el servidor, por ejemplo .aspx o .cshtml o .php etc:
.
<img src="https://serverb.com/dummy.any?parameter=crypted_username_and_date_using_thesecret" style="display:none;" />
-
En ServerB, cuando se recibe una solicitud al dummy.any url descifra el parámetro, realiza algunas comprobaciones y en la respuesta establece una cookie cifrada que contiene el nombre de usuario. La clave de cifrado podría ser el secreto compartido o, mejor aún, puede ser el secreto privado de un ServerB.
-
En ServerB, cuando se recibe una solicitud a la página interna (el iframe) debe contener la cookie, lo que se configuró para este mismo dominio ( enlace ) si la cookie está allí y el usuarioX existe, y digamos que, a los 5 minutos, el período de tiempo está bien, entonces el Servidor B usa su subsistema de autenticación para iniciar sesión en el usuario mediante programación (no se proporciona una contraseña). (el subsistema de autenticación establece sus propias cookies o lo que sea, esta caja negra esperemos en nuestro punto de vista)
- Después de esto, ServerB sirve contenido confidencial que pertenece a userX.
Tenga en cuenta que soy un desarrollador y no un experto en seguridad. Por eso pregunto antes de implementar un agujero de seguridad.