Здравствуйте,
Мы используем SSO от Drupal, и непреднамеренным поведением здесь является то, что все пользователи видят наш сервер Drupal как авторизованный в дополнение к их текущей сессии. Это вызывает много беспокойства и путаницы в нашем сообществе, так как они видят другое устройство, авторизованное не ими.
Можно ли отключить эту функцию или, что еще лучше, исключить определенные IP-адреса, чтобы скрыть наш сервер из списка «Недавние устройства»?
Я встречал эту проблему ранее, когда сайт на Drupal выступал в качестве провайдера SSO для Discourse. С другими провайдерами SSO подобных проблем не наблюдалось. Используете ли вы какой-либо модуль Drupal для SSO? Если да, пожалуйста, сообщите, где его можно найти.
Вы можете скрыть раздел «Недавно использованные устройства» с помощью CSS. Это может стать хорошим временным решением проблемы.
Мы используем модуль Discourse Forum Integration contrib: Client Challenge
Спасибо за подсказку, мы временно скрыли это с помощью CSS. Но было бы неплохо узнать, можно ли настроить его так, чтобы скрывать только наш сервер из списка, позволяя пользователям по-прежнему видеть свои недавно использованные устройства.
Я бы предложил обратиться к разработчику модуля Drupal — последнее обновление этого модуля, судя по всему, было в 2015 году, с указанной поддержкой версии Discourse 1.2.0.beta5 (выпущенной нами в январе 2015 года). Хотя я рад видеть, что он всё ещё работает, не удивительно, что возникают некоторые незначительные проблемы.
Стоит также добавить, что модуль Drupal, ссылка на который приведена выше, доступен только для Drupal 7, срок поддержки которого закончится в ноябре 2021 года. (Это ещё не завтра, но уже достаточно скоро.)
Я бегло ознакомился с модулем Drupal Discourse. Мне не совсем понятно, что вызывает проблему, но по какой-то причине заголовок User Agent и IP-адрес клиента устанавливаются в значения сервера Drupal вместо IP-адреса и User Agent пользователя во время входа через SSO. Это может быть связано с тем, как работает метод drupal_goto.
Одна вещь, которую я заметил в модуле: он предоставляет функциональность для отображения контента Discourse на Drupal. Для этого он выполняет API-запросы к Discourse, включая учетные данные API в строке запроса. Такой тип аутентификации API был устаревшим со стороны Discourse. В ближайшем будущем такие запросы перестанут работать. Если вы используете модуль для отображения контента Discourse на вашем сайте Drupal, вам, возможно, стоит подробнее изучить этот вопрос.
Последнее обновление этого модуля было в 2015 году. Существует модуль Drupal Discourse SSO, который обновлялся более недавно: Client Challenge. Похоже, он предоставляет только функциональность SSO. В нём, кажется, нет кода, который добавляет контент Discourse на сайт Drupal.
Спасибо за дополнительную информацию, Саймон. Мы действительно делаем именно это: раздел комментариев нашего блога использует тему Discourse для обсуждений пользователей, а содержимое этой темы затем отображается в статье блога обратно в Drupal.
Является ли это подходящим местом для получения дополнительной информации об устаревании аутентификации через API? Discourse REST API Documentation
Да, пример POST-запроса, приведенный в начале этой темы, содержит необходимую информацию. Чтобы модуль Drupal Discourse использовал аутентификацию на основе заголовков, потребуется лишь незначительное изменение его кода.
Если ваш сайт Discourse обновлен, в панели администратора Discourse, скорее всего, будет предупреждение об использовании устаревших методов аутентификации для запросов API.