DiscourseSsoConsumer, una extensión SSO para MediaWiki

DiscourseSsoConsumer es una extensión de MediaWiki que permite a un sitio MW autenticar usuarios a través de la API del Proveedor de Discourse Connect (es decir, los usuarios escriben sus contraseñas en Discourse). Lanzada originalmente hace un año, la versión 2.0.0 se lanzó ayer. Creo que es hora de darle a esta extensión su propio tema aquí para que sea más fácil de encontrar (en lugar de la publicación solitaria original en el tema del Proveedor SSO: Use Discourse as an identity provider (SSO, DiscourseConnect) - #104 by mdoggydog).

Se instala a través de composer. Las instrucciones de instalación/configuración se encuentran en el README.

5 Me gusta

¿Hay una versión mínima de Mediawiki para que esto funcione?

Para la v2.0.0, la versión mínima de MediaWiki es 1.35 (y aún no se ha probado en ninguna versión más reciente).

La extensión se desarrolló/probó originalmente con MW 1.31; las versiones v1.1.0 y v1.2.0 probablemente funcionen con MW 1.31, pero no se han probado en ella.

1 me gusta

@mdoggydog
Estoy usando MediaWiki 1.37 y he configurado esta extensión usando composer. Estoy viendo el siguiente error

[YidklSqHVG68-iRmgGiwzwAAAFA] /view/Special:PluggableAuthLogin Error: Llamada al método indefinido MediaWiki\Auth\AuthManager::singleton()

Rastreo:

desde /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}

Parece que el método AuthManager::singleton() fue obsoleto en la versión 1.35 y eliminado en la 1.37.

Creo que ya lo he solucionado; por favor, prueba la versión actual dev-main de esta extensión. (Puedes instalarla a través de composer, usando “dev-main” como número de versión). Me funciona en la 1.35 y, si te funciona en la 1.37, la etiquetaré correctamente como una versión de corrección de errores (por ejemplo, 2.0.1).

1 me gusta

Gracias, esto funcionó :+1:

Genial, y gracias a ti también. Se ha lanzado la versión 2.0.1.

1 me gusta

He instalado la aplicación en mi teléfono Android, es decir, PWA independiente. Cuando inicio sesión en mi MediaWiki, redirige y abre la PWA de Discourse y luego abre mi URL de MediaWiki dentro de la propia PWA, cuando debería redirigir al navegador web correspondiente. Creo que Discourse no está detectando y redirigiendo correctamente al navegador web que inició el inicio de sesión. Esto no está relacionado con la extensión de MediaWiki, sino con la forma en que Discourse maneja las redirecciones/URL externas. ¿Hay alguna configuración que pueda modificar para que el inicio de sesión funcione con la aplicación web progresiva de Discourse?

Lo siento, no tengo ninguna experiencia con la PWA de Discourse.

Imagino que hay un fallo fundamental en la interacción de una PWA y Discourse como proveedor de SSO, sin embargo: cada vez que el consumidor de SSO quiere reautenticar a un usuario ya conectado a Discourse, le dirá al navegador cliente que redirija al servidor de Discourse, esperando que el servidor de Discourse compruebe las cookies existentes del usuario y redirija de nuevo al consumidor… y esperando que todas estas redirecciones ocurran silenciosamente en el navegador sin que el usuario vea nada excepto la carga final de la página.

Pero, la PWA está registrada con Android como una aplicación completamente separada que se invoca para ciertas URL/dominios, ¿verdad? Cuando la PWA redirige de nuevo al navegador original, ¿cómo sabría el navegador original que este nuevo enlace tiene algo que ver con su solicitud original? ¿Y cómo sabría Android que solo debe mostrar la PWA al usuario si la PWA realmente necesita la entrada del usuario? :philosoraptor: