У нас настроен экземпляр Discourse с SSO (с использованием SAML/Shibboleth), и я настроил его для разрешения встраивания контента на другой поддомен, который также использует тот же SSO.
Вот проблема, с которой я столкнулся:
- Пользователь посещает страницу на поддомене X, на которой встроена тема из Discourse, размещенного на поддомене Y.
- Пользователь перенаправляется на поддомен Z для входа через SSO. После этого его перенаправляют обратно на поддомен X.
- Страница на поддомене X загружает JavaScript-файл для встраивания, который создает iframe, пытающийся загрузить тему форума. Однако Discourse (поддомен Y) перенаправляет iframe на поддомен Z для SSO, и, поскольку пользователь уже вошел в систему, его снова перенаправляют на URL встраивания Discourse. Но это приводит к ошибке 400 «Error Embedding», так как URL-ссылка (referer) теперь поступает с поддомена Z (поддомен SSO), а не с поддомена X (домен, одобренный/включенный в белый список для встраивания). Discourse возвращает сообщение: «Ссылка-источник либо не была отправлена, либо не соответствует ни одному из следующих хостов».
- При обновлении страницы всё работает идеально (то есть тема форума загружается успешно), вероятно, потому что браузер теперь имеет действительный cookie сеанса, что устраняет необходимость перенаправления на поддомен SSO.
Есть ли способ исправить это должным образом? В настоящее время у меня есть очень неуклюжий обходной путь: сначала тема форума загружается в скрытый iframe, затем выжидается 1 секунда, после чего тема загружается на реальную страницу, видимую пользователю.
Буду признателен за любую помощь или предложения!