Проблема с SSO между Drupal и Discourse

Привет,

Я новичок в Discourse и пытаюсь настроить свой форум с сайтом на Drupal, используя модуль SSO для Discourse. Я следовал инструкциям модуля и этой теме, но, к сожалению, URL «mydrupalwebsite.com/discourse/sso» возвращает ошибку 404.

С момента публикации этой темы в модуле появились новые настройки с API-ключом, но я не знаю, что с ним делать.

У кого-нибудь возникла такая же проблема?

Спасибо

Можете поделиться ссылкой на используемый вами модуль Drupal? Если речь о модуле, на который есть ссылка в этом посте, то он последний раз обновлялся в марте 2015 года, поэтому вполне вероятно, что с ним возникнут проблемы.

Этот модуль SSO для Drupal был обновлён в декабре 2019 года: Client Challenge. Стоит попробовать его.

Я использую второй вариант с последней версией.

Я настроил секрет SSO и URL SSO, и при попытке входа вижу, что перенаправления происходят, как и должно быть, но страница /discourse/sso возвращает ошибку 404.

Есть ли у модуля какая-либо документация? Обычный процесс включения SSO заключается в добавлении конечной точки SSO в настройку сайта Discourse sso url, добавлении секретного ключа SSO в настройку сайта sso secret, а затем включении настройки сайта enable sso. При первоначальной настройке, вероятно, также стоит включить настройку сайта verbose sso logging. С включённой этой настройкой вы будете получать детали об ошибках SSO в журналах ошибок вашего сайта (находятся в разделе Администрирование / Журналы / Журналы ошибок).

После включения настроек Discourse убедитесь, что URL вашего сайта Discourse и sso secret добавлены на сайте провайдера SSO.

Судя по ошибке, которую вы получаете, скорее всего, настройка сайта enable sso не включена на вашем сайте Discourse.

Если после включения SSO у вас возникнут проблемы с доступом к сайту Discourse, вы как администратор можете обойти вход через SSO, перейдя по адресу /u/admin-login на вашем сайте Discourse. Введите свой адрес электронной почты администратора в форму на странице. Вам будет отправлена одноразовая ссылка для входа.

Спасибо большое за вашу помощь. К сожалению, у модуля нет никакой документации, кроме той, что на его странице проекта.

Я проверил только параметры enable sso и verbose sso logging, заполнил поле sso url значением “mywebsite/discourse/sso” и указал sso secret.

Я следовал инструкциям для модуля Drupal и ввёл URL форума Discourse и секрет SSO в соответствующие поля.

Тем не менее при попытке входа я получаю ошибку 404 по следующему URL:
https://mywebsite/discourse/sso?sso=bm9uY2U9MTJlMmI4ZWNjNzU4ZGE3YTg5ZWIwZDI2MmM5ZTUzOWEmcmV0dXJuX3Nzb191cmw9aHR0cHMlM0ElMkYlMkZmb3J1bXMuc2VnYS1tYWcuY29tJTJGc2Vzc2lvbiUyRnNzb19sb2dpbg%3D%3D&sig=96726cef3a6bb69a0863f66fb0e09ce3edb1ea77f3fd2d9e69cdaf932aede6a2

Вот лог: verbose_sso.txt (5,9 Кб)

Если проблема не в моих настройках в Discourse, я снова обращусь к разработчику модуля.

Ещё раз спасибо.

Я посмотрел на запись в логе, но в ней не отображается ошибка — это просто запись о запуске процесса SSO в Discourse. Сразу после этой записи должна появиться ещё одна, в которой будет показана ошибка. Не могли бы вы попробовать пройти этот процесс снова? Для каждой попытки входа должны создаваться подробные записи лога SSO. Первая запись показывает начало процесса в Discourse, а вторая относится к тому, как Discourse обработал ответ, полученный от вашего сайта.

Возможно, существует другое соответствующее сообщение об ошибке, которое не начинается с текста Verbose SSO log. Проверьте записи в логе за период, непосредственно предшествующий и следующий за моментом отправки запроса SSO.

Я попробовал снова, и получил три идентичных сообщения в логе, которые совпадают с предыдущим. Если следовать этой логике, значит, с моего сайта вообще нет ответа.

Да, это звучит правильно. Вы можете попробовать посмотреть запросы, которые отправляются, открыв веб-инспектор вашего браузера и перейдя на вкладку «Сеть». Выберите опцию «Сохранять логи» на этой вкладке и нажмите ссылку входа на вашем сайте Discourse.

Привет,

Небольшое обновление по этому вопросу: модуль Discourse SSO исправлен и больше не приводит к сбою сайта.

Однако он всё ещё не работает, так как невозможно корректно выйти из системы после первого входа. Открыт новый вопрос, на случай если кто-то захочет разобраться с ним.

Спасибо за уточнение! Дайте нам знать, если проблема с модулем будет решена.

Хорошо, я продолжаю расследование.

Есть ли какая-либо причина, по которой я не смогу войти в Discourse через SSO с разными учётными записями? Возможно, дело в настройках файлов cookie?

Когда SSO включено, если я выхожу из системы, а затем пытаюсь войти снова, меня автоматически авторизует под первой учётной записью.

При отключении SSO у меня проблем не возникает.

Похоже, что выход из Discourse не синхронизирован с выходом с сайта провайдера SSO. Поскольку вы все еще авторизованы на сайте провайдера SSO, при следующем нажатии на ссылку «Войти» в Discourse вы будете авторизованы на основе вашей сессии на сайте провайдера SSO.

Для выхода пользователей из системы провайдера SSO можно использовать настройку сайта logout redirect в Discourse. Когда пользователь выходит из Discourse, его автоматически перенаправляет на указанный URL. Провайдеру SSO необходимо обработать этот URL для выхода пользователя. Однако я недостаточно хорошо знаком с Drupal, чтобы знать, что именно нужно сделать для реализации этого.

Хорошо, проблема решена. Подытожим:

  • Этот модуль работает нормально, есть лишь ошибка с изображением профиля пользователя в Drupal, но патч уже готовится,
  • В этом посте неверно указаны настройки в Discourse: sso_url должен заканчиваться на /discourse_sso, а не на /discourse/sso.
  • Если вы хотите иметь возможность входить в систему с помощью нескольких разных учётных записей, необходимо установить перенаправление при выходе как http://mywebsite/user/logout и отключить расширение Ghostery в вашем браузере для сайта Discourse, если вы используете этот плагин.

Спасибо за вашу помощь, @simon!