Abbiamo configurato un’istanza di Discourse con SSO (utilizzando SAML/Shibboleth) e l’abbiamo impostata per consentire l’incorporamento di contenuti su un altro sottodominio che utilizza lo stesso SSO.
Ecco il problema che sto riscontrando:
- Un utente visita una pagina sul sottodominio X, che incorpora un argomento da Discourse, ospitato sul sottodominio Y.
- L’utente viene reindirizzato al sottodominio Z per l’accesso SSO. Successivamente, viene reindirizzato nuovamente al sottodominio X.
- La pagina sul sottodominio X carica il file JavaScript di incorporamento, che crea un iframe tentando di recuperare l’argomento del forum. Tuttavia, Discourse (sottodominio Y) reindirizza l’iframe al sottodominio Z per l’SSO e, poiché l’utente è già loggato, lo reindirizza nuovamente all’URL di incorporamento di Discourse. Questo però genera un errore 400 “Error Embedding”, poiché l’URL di riferimento ora proviene dal sottodominio Z (il sottodominio SSO) invece che dal sottodominio X (il dominio approvato/in lista bianca per l’incorporamento). Discourse restituisce il messaggio: “The referer was either not sent, or did not match any of the following hosts” (Il riferimento non è stato inviato o non corrisponde a nessuno degli host seguenti).
- Quando si aggiorna la pagina, tutto funziona perfettamente (ovvero, l’argomento del forum viene caricato correttamente), presumibilmente perché il browser ha ora un cookie di sessione valido, eliminando la necessità di reindirizzare al sottodominio SSO.
C’è qualcosa che posso fare per risolvere il problema in modo definitivo? Al momento ho implementato un workaround davvero pessimo: prima tenta di caricare l’argomento del forum in un iframe nascosto, attende 1 secondo e poi carica effettivamente l’argomento nella pagina reale visibile all’utente.
Qualsiasi aiuto o suggerimento sarebbe molto apprezzato!