Мы установили Discourse на site1. Мы являемся владельцами/администраторами site2.tld и хотим получить доступ к форуму через iFrame со страницы на этом домене. Я не особо разбираюсь в тонкостях CSP, поэтому буду благодарен за помощь.
Я не хочу отключать ограничения для предков, но временно снял галочку с ограничения CSP для frame ancestors:
Firefox не может открыть эту страницу
В целях безопасности forum.site1.org не разрешает Firefox отображать страницу, если она встроена другим сайтом. Чтобы просмотреть эту страницу, откройте её в новом окне.
Я изучил раздел о встраивании, но эта функция, похоже, предназначена для других целей. Мы не хотим ограничивать доступ одним темой, и пользователь не будет авторизован. На начальном этапе допустимо, если пользователь не входит в систему, а весь форум доступен только для чтения.
Мы не рекомендуем и не тестируем полное встраивание Discourse в другой сайт с помощью iframe.
Вместо этого мы рекомендуем размещать каждый сайт на собственном домене, используя ссылки, единый вход (SSO) и стилизацию Discourse для соответствия визуальному стилю вашего основного сайта.
Вот описание приложения и задачи. Возможно, существует простое решение…
Есть один сервер Discourse и, как обычно, любое количество учётных записей пользователей и гостей. Зарегистрированные пользователи имеют приложение, в котором размещён локальный веб-сервер. В этом приложении создаётся веб-страница, доступная из локального браузера по адресу http://192.168.1.1:8080. Эта страница предоставляет доступ к форуму через IFrame.
У нас нет контроля над подсетями, обслуживающими контент, поэтому IP-адрес может быть любым из распространённых NAT/DHCP. Однако мы полностью контролируем следующее:
Установку и сервер Discourse.
Контент, который предоставляется.
Порт обычно 8080, настраивается пользователем, но никогда не будет 80 или 443.
Поскольку это локальный контент и не критичный для миссии, он не защищён SSL.
Пользователи должны иметь учётную запись Discourse и должны войти в систему для получения прав на запись.
Что касается безопасности:
Публичный форум доступен из сети через имя хоста.
Доступ из сети, конечно, всегда защищён SSL.
Никто не может создавать контент форума, если не выполнен вход в систему.
Таким образом, локальная страница с IFrame предоставляется по HTTP, но источник IFrame — HTTPS://forum.site.tld. (Это различие протоколов может быть причиной невозможности доступа к форуму даже при отключённой CSP.)
После запуска браузера пользователь для доступа к локальному серверу должен ввести пароль. Мы могли бы включить SSL для этой страницы, если потребуется, чтобы обеспечить согласованность между этой родительской страницей и IFrame, ведущим на защищённый SSL форум.
У нас нет и не планируется использование скриптов для взаимодействия с Discourse через IFrame. Всё, что мы хотим сделать, — разместить форум в контейнере.
Вот несколько случайных идей, которые могут не иметь смысла:
Разрешить пользователям получать API-ключ со страницы своей учётной записи Discourse, который они могут вставить в приложение, после чего он будет передан в Discourse через cookie или иным способом. Это подтверждает, что, хотя пользователь не соответствует требованиям CORS или CSP, у него есть авторизация для доступа к ресурсам.
Заставить приложение внедрять токен в URI IFrame, ведущего к Discourse. Одновременно использовать API-вызов, чтобы разрешить Discourse входящие соединения с этим токеном. (Да, это потребует программирования.)
Становится ещё более неловко… Создать страницу на сайте сообщества, которая открывает IFrame для контента подсети и ещё один IFrame для форума. Этот сайт может быть авторизован для доступа между источниками.
Сдаться в попытках обойти политики и использовать target=window для открытия Discourse вне окна приложения.
Не прибегая сразу к варианту 4… есть ли идеи? Спасибо!