DiscourseSsoConsumer, uma extensão SSO para MediaWiki

DiscourseSsoConsumer é uma extensão do MediaWiki que permite que um site MW autentique usuários via API do Discourse Connect Provider (ou seja, os usuários digitam suas senhas no Discourse). Lançada originalmente há um ano, a versão 2.0.0 foi lançada ontem. Acho que é hora de dar a esta extensão seu próprio tópico aqui para que seja mais fácil de encontrar (em vez do post solitário original no tópico do Provedor SSO: Use Discourse as an identity provider (SSO, DiscourseConnect) - #104 by mdoggydog).

Ele é instalado via composer. As instruções de instalação/configuração estão no README.

5 curtidas

Existe uma versão mínima do Mediawiki para que isso funcione?

Para a v2.0.0, a versão mínima do MediaWiki é 1.35 (e ainda não foi testada em nenhuma versão mais recente).

A extensão foi originalmente desenvolvida/testada com a MW 1.31; as versões v1.1.0 e v1.2.0 provavelmente funcionam com a MW 1.31, mas não foram testadas nela.

1 curtida

@mdoggydog
Estou usando o MediaWiki 1.37 e configurei esta extensão usando o composer. Estou vendo o seguinte erro

[YidklSqHVG68-iRmgGiwzwAAAFA] /view/Special:PluggableAuthLogin Erro: Chamada para método indefinido MediaWiki\Auth\AuthManager::singleton()

Backtrace:

from /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 o método AuthManager::singleton() foi depreciado na versão 1.35 e removido na 1.37.

Acho que corrigi isso agora; por favor, tente a versão atual dev-main desta extensão. (Você pode instalá-la via composer, usando “dev-main” como número da versão.) Funciona para mim na 1.35 e, se funcionar para você na 1.37, eu a marcarei adequadamente como uma correção de bug (por exemplo, 2.0.1).

1 curtida

Obrigado, isso funcionou :+1:

Ótimo, e obrigado também. A versão 2.0.1 foi lançada.

1 curtida

Instalei o aplicativo no meu celular Android, ou seja, PWA autônomo. Quando faço login no meu MediaWiki, ele redireciona e abre o PWA do Discourse e, em seguida, abre meu URL do MediaWiki no próprio PWA, quando deveria redirecionar para o navegador correspondente. Acho que o Discourse não está detectando e redirecionando corretamente para o navegador correspondente que iniciou o login. Isso não está relacionado à extensão do MediaWiki, mas sim a como o Discourse lida com redirecionamentos/URLs externos. Existe alguma configuração que eu possa modificar para que o login funcione com o aplicativo web progressivo do Discourse?

Desculpe, não tenho nenhuma experiência com o Discourse PWA.

Imagino que haja uma falha fundamental na interação de um PWA e o Discourse como Provedor SSO, no entanto: sempre que o consumidor SSO deseja reautenticar um usuário já logado no Discourse, ele dirá ao navegador cliente para redirecionar para o servidor Discourse, esperando que o servidor Discourse verifique os cookies existentes do usuário e redirecione de volta para o consumidor… e esperando que todos esses redirecionamentos ocorram silenciosamente no navegador sem que o usuário veja nada além do carregamento final da página.

Mas o PWA é registrado no Android como um aplicativo totalmente separado que é invocado para certos URLs/domínios, certo? Quando o PWA redireciona de volta para o navegador original, como o navegador original saberia que este novo link tem algo a ver com sua solicitação original? E como o Android saberia que ele só deve mostrar o PWA ao usuário se o PWA realmente precisar de entrada do usuário? :philosoraptor: