Tenemos una instancia de Discourse configurada con SSO (usando SAML/Shibboleth) y la he configurado para permitir la incrustación de contenido en otro subdominio que también utiliza el mismo SSO.
Aquí está el problema que estoy experimentando:
- Un usuario visita una página en el subdominio X, que incrusta un tema de Discourse, alojado en el subdominio Y.
- El usuario es redirigido al subdominio Z para iniciar sesión mediante SSO. Luego es redirigido de nuevo al subdominio X.
- La página en el subdominio X carga el archivo JavaScript de incrustación, que crea un iframe que intenta cargar el tema del foro. Sin embargo, Discourse (subdominio Y) redirige el iframe al subdominio Z para el SSO y, como el usuario ya ha iniciado sesión, lo redirige de nuevo a la URL de incrustación de Discourse. Pero esto resulta en un error 400 “Error al incrustar”, ya que la URL de referencia ahora proviene del subdominio Z (el subdominio del SSO) en lugar del subdominio X (el dominio aprobado/bienalado para la incrustación). Discourse devuelve el mensaje “La referencia no se envió o no coincide con ninguno de los siguientes hosts”.
- Al actualizar la página, todo funciona perfectamente (es decir, el tema del foro se carga correctamente), presumiblemente porque el navegador ahora tiene una cookie de sesión válida, lo que elimina la necesidad de redirigir al subdominio del SSO.
¿Hay algo que pueda hacer para solucionarlo correctamente? Por ahora tengo un hack realmente terrible configurado, que primero intenta cargar el tema del foro en un iframe oculto y luego espera 1 segundo antes de cargar realmente el tema en la página real visible para el usuario.
¡Cualquier ayuda o sugerencia será apreciada!