Лучший способ добавить подтверждённые сторонние аккаунты в профиль

По сути, я пытаюсь реализовать возможность для пользователей подтверждать, что они являются владельцами определённых аккаунтов в социальных сетях, которые не поддерживают OpenID или OAuth (например, аккаунт Riot). Какой подход будет наиболее оптимальным для этого? Возможно ли использовать Discourse в качестве провайдера OAuth для внешнего приложения, которое редактирует базу данных? Я пока не очень хорошо знаком с Discourse, поэтому пытаюсь найти наилучший способ реализации подобной функциональности.

Полагаю, @falco имеет опыт работы с Riot?

О, это интересная проблема. Один из подходов, который мы пробовали, — использование Keybase. У них уже есть надежная система подтверждения личности, работающая со многими платформами. Вы можете прочитать о наших экспериментах по адресу Discourse Keybase Proof. Не уверен, как обстоят дела сейчас после того, как Zoom его приобрел.

Эта часть кажется немного странной. Как то, что Discourse выступает в роли IdP для Riot, поможет вам доказать в Discourse, что вы владеете существующим аккаунтом Riot/Matrix?

Можете пояснить немного подробнее? Вчера я изучал SSO для Matrix, и наконец у них появилась такая возможность. Они реализовали как SAML, так и OAuth2 в ветке develop. Discourse не может работать ни в качестве сервера, ни в качестве клиента, поэтому я рассматривал возможность сделать Discourse сервером OAuth2 или добавить поддержку собственного протокола SSO Discourse в Synapse. Не уверен, что это решит вашу задачу…

Существует ли какой-либо общедоступный URL в Riot, который мог бы контролировать пользователь? Например, общедоступная биография, в которую пользователь мог бы вставить код? Тогда плагин для Discourse мог бы генерировать код, который пользователь вставил бы в свою биографию, и при вводе своего имени пользователя в Riot он проверял бы наличие этого кода по адресу URL/<riot-username>/bio?

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

Стандарт, который я поддерживаю для внедрения, — это «двусторонняя ссылка с атрибутом rel="me"». Добавьте ссылку с этой страницы на ваш профиль в Discourse и ссылку из вашего профиля в Discourse на эту страницу. Обе системы просканируют другой URL, увидят rel=me и отметят его :white_check_mark: как подтверждённый.

Для извлечения поля «биография» с платформ, не поддерживающих этот стандарт, можно предусмотреть специальные случаи.

Я имею в виду использование Discourse в качестве IdP для моей собственной автономной программы. Я просто не уверен, какой будет лучший способ связать такие вещи, как идентификатор Riot Games, поскольку у них пока нет публичного решения OAuth. Я знаю, что они недавно анонсировали RSO, но не назвали дату его публичного релиза.

В настоящее время для того, чтобы сторонние приложения могли «подтвердить» аккаунт Riot, пользователям необходимо войти в клиент League of Legends и изменить поле во вкладке настроек. Я просто пытаюсь придумать способ перехода от Discourse к API League и добавления пользовательского поля профиля после его подтверждения.

Вот часть с кодом для справки. По сути, я затем могу вызвать API League и проверить, совпадает ли значение этого кода с тем, которое пользователю было предписано использовать.

Также я использую систему входа SAML для своего Discourse, так как она интегрирована с остальной частью моего веб-сайта, и хотел бы иметь возможность добавлять «подтвержденные» имена пользователей Discord аналогичным образом. Снова же, я не совсем уверен, как мне заставить авторизованного пользователя в Discourse инициировать OAuth через Discord OAuth, а затем изменить значение на стороне Discourse.

Надеюсь, это проясняет ситуацию и показывает, чего я пытаюсь добиться. Если вам всё ещё нужна дополнительная информация о том, что я планирую сделать, я могу предоставить её. Я просто хочу отображать на профилях только подтверждённые аккаунты. Я планирую добавить Minecraft (Mojang), Discord и Riot Games (League of Legends), но для моих целей мне потребуется подтверждение этих данных, чтобы избежать мошенничества.

Насколько я знаю, связь Twitch ↔ Riot, использовавшаяся для бета-тестирования Valorant, работала через OAuth2 по адресу login. Не уверен, что вы можете создать свой собственный client_id.

Ну, это вполне реализуемо с помощью кастомного плагина!

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

Да, в данный момент это не является общедоступным и находится на ранней стадии. Они обсуждали это в этой статье https://www.riotgames.com/en/DevRel/rso на сайте для разработчиков.

И я так подумал, поэтому попробую заставить это работать.

Единственная причина, по которой я не использую нативную интеграцию с Discord, заключается в том, что остальные мои сайты уже используют аутентификацию через основной IdP, и я хотел бы, чтобы пользователи создавали только одну учётную запись для всего моего сайта, если вы понимаете, о чём я. Я посмотрю, получится ли у меня заставить плагин League of Legends работать, и оценю, насколько сложно будет реализовать то, что я задумал. Просто я не был уверен, есть ли способы доступа к профилям пользователей и их редактирования из PHP-приложения или подобного. В конечном счёте, я просто думал использовать PHP для простой системы входа через OAuth, где они будут входить через Discord, но у меня возникли проблемы с тем, как «сообщить» PHP-скрипту, какой пользователь инициировал запрос, если только я не смогу инициировать запрос через Discourse и позволить PHP-скрипту проверить, что это легитимно.

Огромное спасибо всем за ответы здесь, я всё ещё новичок в управлении собственным Discourse и ценю всю помощь. :smiley:

Хм, мне нужно разобраться, имеют ли плагины больший доступ, чем внешние программы через API, так как я не смог найти способ редактирования полей пользователя через API на https://docs.discourse.org/.