Mise à jour de discourse-plugin-office365-auth en raison d'un bug ?

Bonjour,

Aujourd’hui, j’ai essayé d’étendre l’authentification de notre forum à AzureAD / O365. (J’ai déjà SAML configuré pour notre AD interne, mais de plus en plus d’utilisateurs migrent vers AzureAD).

J’ai donc testé les trois fournisseurs capables de le faire :
https://github.com/discourse/discourse-azure-ad

et
https://github.com/discourse/discourse-plugin-office365-auth

Malheureusement, discourse-azure-ad n’a rien fait — il n’a même pas affiché de bouton sur l’écran de connexion/inscription.

openid-connect a fonctionné, mais en raison de la nature du point de terminaison Azure pour « tous les locataires » (https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration) qui renvoie un …/{tenantid}/… dans l’URI pour « issuer », cela ne fonctionne que pour les utilisateurs de notre propre locataire AzureAD/Office365 (et non pour les utilisateurs d’autres locataires).

Ainsi, le plugin Office365-Auth était le seul qui restait.
Il a fonctionné (également pour les utilisateurs d’autres locataires AzureAD), mais présentait un bug : lorsque l’e-mail de la connexion AzureAD n’était pas l’e-mail principal de l’utilisateur Discourse (déjà existant), la connexion échouait :
À savoir :

J’ai dû ajouter la deuxième adresse afin que la connexion corresponde à l’utilisateur lors de l’inscription, mais tant que l’adresse était « secondaire », la connexion échouait avec une erreur (« vous n’avez pas les droits pour faire cela ») (l’inscription fonctionnait !).
De plus, le fournisseur ne me permettait pas de « lier » la nouvelle connexion depuis mon écran utilisateur (super nouvelle fonctionnalité :slight_smile: ).

J’ai rapidement identifié le problème de connexion lié à l’e-mail dans cette partie du code :

Je ne connais pas assez Ruby et Discourse pour l’affirmer catégoriquement, mais je pense que ce code tente de mettre à jour l’e-mail principal chaque fois que l’un des e-mails ne correspond pas (ce qui échouera si plus d’un e-mail est présent et que le principal n’est pas celui d’O365).

Néanmoins, openid-connect gère correctement cette partie et propose même un paramètre pour mettre à jour l’e-mail (ou non) et pour lier la connexion depuis l’écran utilisateur. J’ai donc copié sans vergogne les lignes pertinentes de openid-connect vers office365-auth, commenté le « after_authenticate » dans office365-auth, et j’ai maintenant une connexion fonctionnelle depuis n’importe quel locataire AzureAD ainsi qu’une liaison si l’e-mail correspond à l’un des e-mails de l’utilisateur.

Les modifications pertinentes se trouvent dans mon dépôt GitHub et je vais créer une pull request. Mais un problème subsiste :frowning:
Comme j’ai ajouté la possibilité de connecter/révoquer, le fournisseur est maintenant visible dans le profil utilisateur, mais son nom manque ?!:

Comment puis-je l’ajouter ? Avez-vous des liens vers la documentation pertinente ? Il ne semble pas suffisant de l’entrer dans client.en.yml … ou alors je manque quelque chose d’autre.
Une fois ce problème résolu, je serais heureux de proposer une pull request pour le fournisseur mis à jour/corrigé …

1 « J'aime »

Ok, oubliez ça. J’ai dû oublier un ./launcher rebuild app après le dernier changement (pertinent) :frowning:

Mais j’ai aussi dû faire une erreur en passant de OAuth2Authenticator à ManagedAuthenticator → donc, retour au tableau de programmation. Je publierai à nouveau lorsque cela sera vraiment corrigé (l’association a fonctionné, mais pas la révocation).

1 « J'aime »