Автоматическое управление сессиями с OAuth SSO

Здравствуйте,

Мы разрабатываем набор сервисов для конкретного закрытого сообщества и приняли решение включить 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, при условии, что у него уже есть действительный куки-файл в провайдере идентификации.

В версиях до последней, такой «магический» процесс входа был доступен только для сайтов, использующих наш собственный протокол SSO, описанный в Официальная система единого входа для Discourse (sso).

Рекомендую обновиться до последней версии.

Хм, я использую образы Bitnami, и их последняя версия всё ещё 2.5.2, так что, вероятно, мне придётся немного подождать (или найти способ выполнить обновление вручную, или использовать другой образ).

В любом случае, спасибо, что указали мне правильное направление. Очень признателен!

Имейте в виду, что образы Bitnami не поддерживаются разработчиками Discourse и на протяжении многих лет вызывали множество проблем совместимости с обычным использованием программного обеспечения. Настоятельно рекомендую использовать официальную стандартную установку Discourse.