SSO und Einbettung

Wir haben eine Discourse-Instanz mit SSO (unter Verwendung von SAML/Shibboleth) eingerichtet und konfiguriert, um das Einbetten von Inhalten auf einer anderen Subdomain zu ermöglichen, die dasselbe SSO nutzt.

Hier ist das Problem, das ich erlebe:

  1. Ein Benutzer besucht eine Seite auf Subdomain X, die ein Discourse-Thema einbettet, das auf Subdomain Y gehostet wird.
  2. Der Benutzer wird zur SSO-Anmeldung auf Subdomain Z weitergeleitet. Anschließend wird er zurück zu Subdomain X weitergeleitet.
  3. Die Seite auf Subdomain X lädt die JavaScript-Einbettungsdatei, die ein Iframe erstellt, das versucht, das Forumsthema abzurufen. Discourse (Subdomain Y) leitet das Iframe jedoch zur SSO auf Subdomain Z weiter. Da der Benutzer bereits angemeldet ist, wird er zurück zur Discourse-Einbettungs-URL weitergeleitet. Dies führt jedoch zu einem 400-Fehler „Error Embedding", da die Referer-URL nun von Subdomain Z (der SSO-Subdomain) stammt und nicht von Subdomain X (der für das Einbetten freigegebenen/whitelisteden Domain). Discourse meldet: „The referer was either not sent, or did not match any of the following hosts".
  4. Bei einem Seiten-Neuladen funktioniert alles einwandfrei (d. h. das Forumsthema wird erfolgreich geladen), vermutlich weil der Browser nun ein gültiges Sitzungs-Cookie hat, was die Weiterleitung zur SSO-Subdomain überflüssig macht.

Gibt es eine Möglichkeit, dies ordnungsgemäß zu beheben? Momentan habe ich einen wirklich schrecklichen Hack implementiert, der zunächst versucht, das Forumsthema in ein verstecktes Iframe zu laden, und dann eine Sekunde wartet, bevor das Thema tatsächlich auf der für den Benutzer sichtbaren Seite geladen wird.

Jede Hilfe oder Anregung wird sehr geschätzt!

Nach etwas weiterem Nachforschen frage ich mich, ob eine etwas weniger ‘hackige’ Lösung darin bestehen würde, den Ansatz anzupassen, den @simon in diesem Beitrag beschreibt: Automatically login via SSO - #4 by simon

  1. Die Einstellung „Sso erlaubt alle Rückkehrpfade