Обновление плагина discourse-plugin-office365-auth из-за ошибки?

Привет,

сегодня я попытался расширить аутентификацию на нашем форуме до AzureAD / O365. (У меня уже работает SAML для нашего внутреннего AD, но всё больше пользователей мигрируют на AzureAD).

Поэтому я попробовал три провайдера, способных это сделать:

и

К сожалению, discourse-azure-ad ничего не сделал — кнопка даже не появилась на экране входа/регистрации.

openid-connect заработал, но из-за особенностей конечной точки Azure для «всех арендаторов» ( https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration ), которая возвращает …/{tenantid}/… в URI для «издателя», это работает только для пользователей нашего собственного тенанта AzureAD/Office365 (а не для пользователей других тенантов).

Таким образом, остался только плагин Office365-Auth.
Он заработал (в том числе для пользователей из других тенантов AzureAD), но в нём была ошибка: если электронная почта входа в AzureAD не совпадала с основной почтой уже существующего пользователя Discourse, вход не удавался:
То есть:

Мне пришлось добавить второй адрес, чтобы вход сопоставлялся с пользователем при регистрации, но пока этот адрес был «вторичным», вход завершался ошибкой («у вас нет прав на это») (регистрация работала!).
Кроме того, провайдер не позволял мне «ассоциировать» новый вход со своей страницы пользователя (классная новая функция :)).

Я быстро выявил проблему входа по электронной почте в этой части кода:

Я недостаточно хорошо знаком с Ruby и Discourse, чтобы утверждать это наверняка, но, похоже, этот код пытается обновить основную электронную почту, если одна из почт не совпадает (что приведёт к ошибке, если присутствует более одной почты и основная не совпадает с той, что из O365).

Тем не менее, openid-connect сделал эту часть правильно и даже предоставил настройку для обновления почты (или нет) и для ассоциации входа со страницы пользователя. Поэтому я бесцеремонно скопировал соответствующие строки из openid-connect в office365-auth, закомментировал «after_authenticate» в office365-auth и получил рабочий вход из любого тенанта AzureAD, а также возможность ассоциации, если почта совпадает с любой из почт пользователя.

Соответствующие изменения находятся в моём репозитории на Github, и я создам pull request. Но одна проблема всё ещё осталась :frowning:
Поскольку я добавил возможность подключения/отключения, провайдер теперь отображается в профиле пользователя, но у него отсутствует имя?!:

Как это добавить? Есть ли ссылки на соответствующую документацию? Похоже, недостаточно просто ввести это в client.en.yml … или я что-то упускаю.
После того как я это исправлю, я с радостью создам pull request для обновлённого/исправленного провайдера …

Ладно, забудьте. Должно быть, я забыл выполнить ./launcher rebuild app после последнего (важного) изменения :frowning:

Но также, вероятно, я допустил ошибку при переходе с OAuth2Authenticator на ManagedAuthenticator → так что возвращаюсь к программированию. Напишу снова, когда это действительно будет исправлено (привязка работала, а отзыв — нет)