"Фейковый" провайдер OAuth?

Привет :wave: Я задаюсь вопросом, возможно ли то, что я пытаюсь сделать.

Итак, я хочу связать аккаунты Minecraft с аккаунтами Discourse, примерно так же, как можно добавить Discord, Google и т.д., но в Minecraft в настоящее время нет системы OAuth (возможно, после того, как все перейдут на аккаунты Microsoft, но это потребует некоторого времени). Поэтому предлагаемая мной система предполагает, что пользователь введёт случайно сгенерированный код, который он получит в игре. Есть ли способ добавить это к его аккаунту, как и любую другую связанную учётную запись? Я бы, вероятно, построил это аналогично тому, как работает https://mc-oauth.net/, но вместо входа в систему они использовали бы команду в чате.

Если это возможно, не могли бы вы дать какие-то указания, как это реализовать? Мне в основном понадобится всплывающее модальное окно с запросом кода → валидация кода → получение UUID и сохранение его как идентификатора внешней учётной записи.

РЕДАКТИРОВАНИЕ: На самом деле, похоже, что с переходом на аккаунты Microsoft я могу модифицировать существующий плагин для аккаунтов Microsoft, чтобы хранить UUID аккаунтов Minecraft. Мне ещё предстоит это проверить.

Может быть, для этого подойдут пользовательские поля? Creating and configuring custom user fields

При регистрации можно сделать пользовательское поле обязательным, и в нём будет приниматься сгенерированный случайный код. Также пользовательские поля можно редактировать в настройках профиля после регистрации, если существующие аккаунты должны добавить код.

О-о-о, я действительно об этом не подумал. Спасибо за идею — основная причина, по которой я искал подход с OAuth, заключалась в том, что я могу получить пользователя по внешнему ID. Я попробую выяснить, можно ли получить пользователя по полю пользователя.

РЕДАКТИРОВАНИЕ: Ладно, возможно, у меня есть способ сделать это с помощью пользовательских полей. Вероятно, мне просто придётся использовать внешнюю базу данных и создать собственный механизм запроса пользователя Discourse по его Minecraft UUID. Я просто недостаточно хорошо знаю ограничения Discourse, чтобы понять, есть ли лучший способ.

РЕДАКТИРОВАНИЕ 2: Хм, я не вижу способа редактировать пользовательские поля через API. В идеале я хотел, чтобы они устанавливались только через API, чтобы гарантировать, что пользователь владеет аккаунтом. Возможно, мне просто придётся создать внешнюю базу данных и реализовать привязку аккаунтов через что-то другое.

Звучит так, будто вы хотите реализовать собственного провайдера OAuth?

Примерно как на этой схеме:

Похоже, что ваш собственный механизм должен будет заменить «Каталог OAuth2».

(Возможно, будет проще использовать DiscourseConnect)

Конечно, всё зависит от того, как вы уже реализуете аутентификацию на сайте…

С другой стороны, это может быть излишним усложнением — у нас есть поддержка пользовательских полей, доступных только для сотрудников, которые могут подойти для этой задачи.

Да, я думаю, мой основной вопрос в том: если это только для сотрудников, есть ли способ установить эти поля через какой-либо API-эндпоинт? Я не смог найти способ сделать это автоматически.

Я не вижу записи в docs.discourse.org по этому вопросу. Все изменения, вносимые веб-браузером, выполняются с использованием того же API, поэтому мой совет — провести реверс-инжиниринг необходимого.

О, это действительно полезно — спасибо, что поделились! Я ещё немного подумал и провёл исследование о том, как это можно реализовать. Моя идея — использовать параметр state в OAuth для входа в учётную запись Discourse, а затем связать полученное состояние с UUID в Minecraft. Параметр state будет просто случайным значением, которое хранится в базе данных вместе с UUID из Minecraft. Думаю, такой подход должен сработать. Спасибо всем за все идеи и ресурсы!

Так как мне не требовался доступ к UUID Minecraft внутри самого Discourse, я в итоге создал внешнюю систему, интегрированную с SSO Discourse. Благодарю за помощь! Если хотите посмотреть, что у меня получилось, я опубликовал это здесь. Возможно, однажды я вернусь к этой теме, когда учётные записи Microsoft станут обязательными для всех пользователей Minecraft, поскольку наверняка найдётся способ использовать их API для реализации аналогичного функционала.