DiscourseSsoConsumer, un'estensione SSO per MediaWiki

DiscourseSsoConsumer è un’estensione MediaWiki che consente a un sito MW di autenticare gli utenti tramite l’API del provider Discourse Connect (ovvero, gli utenti digitano le loro password in Discourse). Rilasciata originariamente un anno fa, la versione 2.0.0 è stata rilasciata ieri. Penso che sia ora di dare a questa estensione un proprio argomento qui in modo che sia più facile da trovare (rispetto al post originale solitario nell’argomento SSO Provider: Use Discourse as an identity provider (SSO, DiscourseConnect) - #104 by mdoggydog).

Si installa tramite composer. Le istruzioni di installazione/configurazione si trovano nel README.

5 Mi Piace

È richiesta una versione minima di Mediawiki affinché questo funzioni?

Per la v2.0.0, la versione minima di MediaWiki è la 1.35 (e non è ancora stata testata su versioni più recenti).

L’estensione è stata originariamente sviluppata/testata con MW 1.31; le versioni v1.1.0 e v1.2.0 probabilmente funzionano con MW 1.31, ma non sono state testate su di essa.

1 Mi Piace

@mdoggydog
Sto usando MediaWiki 1.37 e ho configurato questa estensione usando composer. Sto riscontrando il seguente errore

[YidklSqHVG68-iRmgGiwzwAAAFA] /view/Special:PluggableAuthLogin Errore: Chiamata al metodo non definito MediaWiki\Auth\AuthManager::singleton()

Backtrace:

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

Sembra che il metodo AuthManager::singleton() sia stato deprecato in 1.35 e rimosso in 1.37.

Penso di averlo risolto ora; prova la versione corrente dev-main di questa estensione. (Puoi installarla tramite composer, usando “dev-main” come numero di versione.) Funziona per me su 1.35 e, se funziona anche per te su 1.37, la etichetterò correttamente come rilascio di correzione bug (ad esempio, 2.0.1).

1 Mi Piace

Grazie, ha funzionato :+1:

Fantastico, e grazie anche a te. È stata rilasciata la versione 2.0.1.

1 Mi Piace

Ho installato l’app sul mio telefono Android, ovvero PWA standalone. Quando accedo al mio MediaWiki, viene reindirizzato e apre il PWA di discourse, quindi apre il mio URL MediaWiki all’interno del PWA stesso, quando invece dovrebbe reindirizzare al browser web corrispondente. Penso che discourse non stia rilevando e reindirizzando correttamente al browser web corrispondente che ha avviato l’accesso. Questo non è correlato all’estensione MediaWiki, ma a come discourse gestisce i reindirizzamenti/URL esterni. C’è qualche impostazione che posso modificare per far funzionare l’accesso con l’app web progressiva di discourse?

Mi dispiace, non ho alcuna esperienza con la PWA di Discourse.

Immagino ci sia un difetto fondamentale nell’interazione tra una PWA e Discourse come provider SSO, tuttavia: ogni volta che il consumer SSO vuole riautenticare un utente già loggato su Discourse, dirà al browser client di reindirizzare al server Discourse, aspettandosi che il server Discourse controlli i cookie esistenti dell’utente e reindirizzi nuovamente al consumer… e aspettandosi che tutti questi reindirizzamenti avvengano silenziosamente nel browser senza che l’utente veda nulla tranne il caricamento finale della pagina.

Ma la PWA è registrata con Android come un’applicazione completamente separata che viene invocata per determinati URL/domini, giusto? Quando la PWA reindirizza al browser originale, come farà il browser originale a sapere che questo nuovo link ha qualcosa a che fare con la sua richiesta originale? E come potrà Android sapere che dovrebbe mostrare la PWA all’utente solo se la PWA richiede effettivamente un input dall’utente? :philosoraptor: