Hola,
hoy he intentado extender la autenticación en nuestro foro a AzureAD / O365. (Ya tengo SAML funcionando con nuestro AD interno, pero cada vez más usuarios están migrando a AzureAD).
Por lo tanto, he probado los 3 proveedores que pueden hacer esto:
https://github.com/discourse/discourse-azure-ad
y
https://github.com/discourse/discourse-plugin-office365-auth
Lamentablemente, discourse-azure-ad no hizo nada; ni siquiera mostró un botón en la pantalla de inicio de sesión/registro.
openid-connect funcionó, pero debido a la naturaleza del punto final de Azure para “todos los inquilinos” (https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration) que devuelve un …/{tenantid}/… en la URI para “emisor”, esto solo funciona para usuarios en nuestro propio inquilino de AzureAD/Office365 (y no para usuarios en otros inquilinos).
Así que el plugin Office365-Auth fue el último que quedaba.
Funcionó (también para usuarios de otros inquilinos de AzureAD), pero tenía un error: cuando el correo electrónico del inicio de sesión de AzureAD no era el correo electrónico principal del usuario de Discourse (ya existente), el inicio de sesión fallaba:
Es decir:
Tuve que agregar la segunda dirección para que el inicio de sesión se asociara con el usuario al registrarse, pero mientras la dirección fuera “secundaria”, el inicio de sesión fallaba con un error (“no tienes permisos para hacer esto”) (¡el registro funcionaba!).
Además, el proveedor no me permitió “asociar” el nuevo inicio de sesión desde mi pantalla de usuario (¡qué nueva función tan genial :)).
Identifiqué rápidamente el problema de inicio de sesión con el correo electrónico en esta parte del código:
No estoy lo suficientemente familiarizado con Ruby y Discourse para afirmarlo con certeza, pero creo que este código intentará actualizar el correo electrónico principal siempre que uno de los correos electrónicos no coincida (lo cual fallará cuando haya más de un correo electrónico presente y el principal no sea el de O365).
Sin embargo, openid-connect hizo esta parte correctamente e incluso proporcionó una configuración para actualizar el correo electrónico (o no) y para asociar el inicio de sesión desde la pantalla de usuario. Así que copié descaradamente las líneas relevantes de openid-connect a office365-auth, comenté el “after_authenticate” en office365-auth y ahora tengo un inicio de sesión funcional desde cualquier inquilino de AzureAD y una asociación si el correo electrónico es cualquiera de los correos electrónicos del usuario.
Los cambios relevantes están en mi repositorio de GitHub y crearé una solicitud de extracción (pull request). Pero aún queda un problema ![]()
Como agregué la capacidad de conectar/desconectar, ahora el proveedor es visible en el perfil del usuario, ¡pero le falta su nombre?!:
¿Cómo lo agrego? ¿Hay algún enlace a la documentación relevante? No parece suficiente ingresarlo en client.en.yml… o me estoy perdiendo algo más.
Una vez que solucione esto, estaré encantado de hacer una solicitud de extracción para el proveedor actualizado/corregido…

