DiscourseSsoConsumer — расширение SSO для MediaWiki

DiscourseSsoConsumer — это расширение для MediaWiki, позволяющее сайту MW аутентифицировать пользователей через API провайдера Discourse Connect (то есть пользователи вводят свои пароли в Discourse). Изначально выпущенное год назад, версия 2.0.0 была опубликована вчера. Я считаю, что пришло время выделить этому расширению отдельную тему здесь, чтобы его было легче найти (в отличие от оригинального одиночного поста в теме «Провайдер SSO»: Use Discourse as an identity provider (SSO, DiscourseConnect) - #104 by mdoggydog).

Установка осуществляется через composer. Инструкции по установке и настройке содержатся в README.

5 лайков

Есть ли минимальная версия MediaWiki, необходимая для работы этого?

Для версии 2.0.0 минимально требуемая версия MediaWiki — 1.35 (она ещё не тестировалась на более новых версиях).

Расширение изначально разрабатывалось и тестировалось на MW 1.31; версии v1.1.0 и v1.2.0, вероятно, работают с MW 1.31, но они не тестировались на ней.

1 лайк

@mdoggydog
Я использую MediaWiki 1.37 и настроил это расширение с помощью composer. Я получаю следующую ошибку

[YidklSqHVG68-iRmgGiwzwAAAFA] /view/Special:PluggableAuthLogin Ошибка: вызов несуществующего метода MediaWiki\Auth\AuthManager::singleton()

Обратная трассировка:

из /var/www/vhosts/mywebsite.com/httpdocs/w/extensions/DiscourseSsoConsumer/src/DiscourseSsoConsumer.php(132)
#0 /var/www/vhosts/mywebsite.com/httpdocs/w/extensions/PluggableAuth/includes/PluggableAuthLogin.php(36): MediaWiki\Extension\DiscourseSsoConsumer\DiscourseSsoConsumer->authenticate()
#1 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/specialpage/SpecialPage.php(647): PluggableAuthLogin->execute()
#2 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/specialpage/SpecialPageFactory.php(1366): SpecialPage->run()
#3 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/MediaWiki.php(314): MediaWiki\SpecialPage\SpecialPageFactory->executePath()
#4 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/MediaWiki.php(930): MediaWiki->performRequest()
#5 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/MediaWiki.php(564): MediaWiki->main()
#6 /var/www/vhosts/mywebsite.com/httpdocs/w/index.php(53): MediaWiki->run()
#7 /var/www/vhosts/mywebsite.com/httpdocs/w/index.php(46): wfIndexMain()
#8 {main}

Похоже, что метод AuthManager::singleton() был устаревшим в версии 1.35 и удалён в версии 1.37.

Я думаю, что теперь это исправлено; пожалуйста, попробуйте текущую версию dev-main этого расширения. (Вы можете установить её через Composer, указав “dev-main” в качестве номера версии.) У меня это работает на версии 1.35, и если у вас это заработает на версии 1.37, я официально помечу это как выпуск с исправлением ошибки (например, 2.0.1).

1 лайк

Спасибо, сработало :+1:

Отлично, и спасибо вам тоже. Версия 2.0.1 уже выпущена.

1 лайк

Я установил приложение на свой Android-телефон, то есть PWA в режиме standalone. Когда я вхожу в систему в MediaWiki, происходит перенаправление, и открывается PWA Discourse, а затем внутри самого PWA открывается мой URL MediaWiki, хотя должно происходить перенаправление в соответствующий веб-браузер. Мне кажется, что Discourse некорректно определяет и не перенаправляет в соответствующий веб-браузер, который инициировал вход. Это не связано с расширением MediaWiki, а связано с тем, как Discourse обрабатывает перенаправления и внешние URL-адреса. Есть ли какая-то настройка, которую я могу изменить, чтобы вход в систему работал с прогрессивным веб-приложением Discourse?

Извините, у меня нет никакого опыта работы с Discourse PWA.

Я предполагаю, что здесь есть фундаментальная проблема во взаимодействии PWA и Discourse как провайдера SSO: всякий раз, когда потребитель SSO хочет повторно аутентифицировать пользователя, уже вошедшего в Discourse, он отправляет команду браузеру клиента на перенаправление на сервер Discourse, ожидая, что сервер Discourse проверит существующие куки пользователя и перенаправит обратно к потребителю… при этом все эти перенаправления должны происходить незаметно в браузере, и пользователь не увидит ничего, кроме финальной загрузки страницы.

Однако PWA зарегистрирована в Android как совершенно отдельное приложение, которое вызывается для определённых URL/доменов, верно? Когда PWA перенаправляет обратно в исходный браузер, как этот браузер узнает, что новая ссылка имеет какое-либо отношение к его первоначальному запросу? И как Android может определить, что PWA следует показывать пользователю только в том случае, если PWA действительно требует ввода от пользователя? :philosoraptor: