Nous avons configuré une instance Discourse avec SSO (utilisant SAML/Shibboleth) et je l’ai paramétrée pour autoriser l’intégration de contenu sur un autre sous-domaine qui utilise également le même SSO.
Voici le problème que je rencontre :
- Un utilisateur visite une page sur le sous-domaine X, qui intègre un sujet provenant de Discourse, hébergé sur le sous-domaine Y.
- L’utilisateur est redirigé vers le sous-domaine Z pour la connexion SSO. Il est ensuite redirigé vers le sous-domaine X.
- La page du sous-domaine X charge le fichier JavaScript d’intégration, qui crée une iframe tentant de récupérer le sujet du forum. Cependant, Discourse (sous-domaine Y) redirige l’iframe vers le sous-domaine Z pour le SSO, et comme l’utilisateur est déjà connecté, il est renvoyé vers l’URL d’intégration de Discourse. Cela entraîne toutefois une erreur 400 « Error Embedding », car l’URL de référence provient maintenant du sous-domaine Z (le sous-domaine SSO) au lieu du sous-domaine X (le domaine approuvé/blanchi pour l’intégration). Discourse renvoie le message « The referer was either not sent, or did not match any of the following hosts » (La référence n’a soit pas été envoyée, soit ne correspond à aucun des hôtes suivants).
- Lorsque vous actualisez la page, tout fonctionne parfaitement (c’est-à-dire que le sujet du forum est chargé avec succès), vraisemblablement parce que le navigateur possède désormais un cookie de session valide, ce qui élimine le besoin de rediriger vers le sous-domaine SSO.
Y a-t-il une solution pour régler ce problème correctement ? Pour l’instant, j’ai mis en place un véritable hack terrible : je tente d’abord de charger le sujet du forum dans une iframe cachée, puis j’attends une seconde avant de charger réellement le sujet dans la page visible pour l’utilisateur.
Toute aide ou suggestion serait appréciée !