Мы разрабатываем набор сервисов для конкретного закрытого сообщества и приняли решение включить Discourse в качестве социальной платформы. Меня интересует, какой является наиболее оптимальный и элегантный (с технической точки зрения) способ бесшовной интеграции экземпляра Discourse в наш набор.
Для примера: наш набор включает сервис A и сервис B (которые мы разработали внутренними силами), а также службу OAuth2 SSO.
Если пользователь нажимает кнопку «Войти» в сервисе A или B, он перенаправляется в службу SSO, где входит в систему, а затем возвращается обратно, как обычно. Однако благодаря управлению куки и сессиями, вход в сервис A не требует повторного входа в сервис B, если пользователь впоследствии решит посетить сервис B (у него уже будет активная сессия).
Аналогично мы хотим обеспечить возможность бесшовного перехода пользователей в сервис Discourse из сервиса A или B после входа через службу SSO. Предположим, что запись о пользователе существует во всех сервисах. В настоящее время оценен плагин OAuth2 для Discourse, который работает с нашей службой SSO, но требует, чтобы пользователи нажимали «Войти через SSO» повторно при посещении Discourse. Существует ли способ, например, через вызов API, автоматически инициировать сессию в Discourse при входе пользователя через общую службу SSO из сервиса A или B?
Кроме того, вышеуказанный вопрос распространяется и на интеграцию комментариев через встроенный компонент. Поддержание «публичного» сервиса Discourse не вызывает проблем с разделом комментариев, и комментарии корректно встраиваются. Однако при запуске приватного сервиса Discourse окно встроенных комментариев не будет отображать комментарии корректно, если пользователь ранее не вошел в систему в Discourse, что является проблемой с точки зрения бесшовной интеграции.
Существует ли способ обойти эти проблемы? Я рассматривал возможность создания плагина-прокладки (middleware), который будет декодировать токен или куки и мгновенно аутентифицировать и входить соответствующего пользователя перед выполнением фактического вызова. Существует ли уже готовый плагин для этого?
Спасибо за быстрый ответ. Однако это не решает проблему. Как в встроенном окне комментариев Discourse, так и при переходе на сайт Discourse пользователю (который уже вошел в систему, например, в «сервис A» через SSO) потребуется войти снова.
В обоих случаях я вижу приветственное сообщение: «Добро пожаловать. Требуется учетная запись. Пожалуйста, попросите существующего участника пригласить вас или войдите в систему, чтобы продолжить», а также кнопку входа. При нажатии на неё открывается окно входа, и мне предлагается войти с помощью имени пользователя и пароля или через OAuth SSO. Вводить имя пользователя и пароль SSO заново не требуется, так как сессия SSO все еще активна, однако я не хочу, чтобы пользователи сталкивались с этим. Когда пользователь входит в «сервис A», он должен автоматически входить в Discourse без необходимости снова нажимать кнопку «Войти».
Что для этого нужно?
Я использую версию Discourse 2.5.2, если это имеет значение.
В последней версии Discourse, если включены оба параметра «требуется вход» и «автоматическая авторизация», пользователь будет автоматически авторизован в Discourse, при условии, что у него уже есть действительный куки-файл в провайдере идентификации.
Хм, я использую образы Bitnami, и их последняя версия всё ещё 2.5.2, так что, вероятно, мне придётся немного подождать (или найти способ выполнить обновление вручную, или использовать другой образ).
В любом случае, спасибо, что указали мне правильное направление. Очень признателен!
Имейте в виду, что образы Bitnami не поддерживаются разработчиками Discourse и на протяжении многих лет вызывали множество проблем совместимости с обычным использованием программного обеспечения. Настоятельно рекомендую использовать официальную стандартную установку Discourse.