Aggiornato discourse-plugin-office365-auth a causa di un bug?

Ciao,

oggi ho provato a estendere l’autenticazione del nostro forum ad AzureAD / O365. (Ho già SAML attivo per il nostro AD interno, ma sempre più utenti stanno migrando verso AzureAD).

Ho quindi provato i 3 provider in grado di farlo:

e

Purtroppo, discourse-azure-ad non ha fatto nulla: non ha nemmeno mostrato un pulsante nella schermata di login/registrazione.

openid-connect ha funzionato, ma a causa della natura dell’endpoint Azure per “tutti i tenant” ( https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration ), che restituisce un …/{tenantid}/… nell’URI per “issuer”, funziona solo per gli utenti del nostro stesso tenant AzureAD/Office365 (e non per gli utenti di altri tenant).

Quindi, il plugin Office365-Auth è stato l’ultimo rimasto.
Ha funzionato (anche per gli utenti di altri tenant AzureAD), ma presentava un bug: se l’email del login AzureAD non corrispondeva all’email primaria dell’utente Discourse (già esistente), il login falliva:
Cioè:

Ho dovuto aggiungere il secondo indirizzo affinché il login corrispondesse all’utente durante la registrazione, ma finché l’indirizzo era “secondario”, il login falliva con un errore (“non hai i diritti per farlo”) (la registrazione funzionava!).
Inoltre, il provider non mi permetteva di “associare” il nuovo login dalla mia schermata utente (bella nuova funzionalità :)).

Ho identificato rapidamente il problema del login legato all’email in questa parte del codice:

Non conosco abbastanza Ruby e Discourse per affermarlo con certezza, ma penso che questo codice tenti di aggiornare l’email primaria ogni volta che una delle email non corrisponde (il che fallisce quando sono presenti più email e quella primaria non è quella di O365).

Tuttavia, openid-connect ha gestito correttamente questa parte e ha persino fornito un’impostazione per aggiornare l’email (o meno) e per associare il login dalla schermata utente. Quindi ho copiato senza mezzi termini le righe pertinenti da openid-connect a office365-auth, ho commentato “after_authenticate” in office365-auth e ho ottenuto un login funzionante da ogni tenant AzureAD e un’associazione se l’email era presente tra le email dell’utente.

Le modifiche pertinenti sono nel mio repository Github e creerò una pull request. Ma rimane ancora un problema :frowning:
Poiché ho aggiunto la possibilità di connettere/revocare, ora il provider è visibile nel profilo utente, ma manca il suo nome?!:

Come posso aggiungerlo? Ci sono link alla documentazione pertinente? Sembra che non sia sufficiente inserirlo nel file client.en.yml… oppure mi manca qualcos’altro.
Dopo aver risolto questo problema, sarò felice di inviare una pull request per il provider aggiornato/riparato…

1 Mi Piace

Ok, dimenticatelo. Devo aver dimenticato di eseguire ./launcher rebuild app dopo l’ultima modifica (rilevante) :frowning:

Ma devo anche aver commesso un errore passando da OAuth2Authenticator a ManagedAuthenticator → quindi, ritorno alla programmazione. Ripubblicherò quando sarà davvero risolto (l’associazione ha funzionato, ma la revoca no)

1 Mi Piace