Mejor manera de agregar cuentas de terceros verificadas al perfil

Básicamente, estoy intentando permitir que los usuarios verifiquen que son los propietarios de ciertas cuentas de redes sociales que no tienen OpenID ni OAuth (por ejemplo, una cuenta de Riot). ¿Cuál sería el mejor enfoque para hacerlo? ¿Sería posible que un usuario utilice Discourse como proveedor de OAuth para una aplicación externa que edite la base de datos? Aún no estoy muy familiarizado con Discourse, así que estoy tratando de pensar en la mejor manera de crear algo así.

Creo que @falco tiene experiencia con Riot.

¡Oh, ese es un problema interesante! Un enfoque que probamos fue utilizar Keybase para ello. Ellos ya cuentan con un sistema robusto de prueba de identidad que funciona con muchas plataformas. Puedes leer sobre nuestros experimentos en Discourse Keybase Proof. No estoy seguro de cómo esté ahora que Zoom lo adquirió.

Esta parte me resulta un poco extraña. ¿Cómo ayudaría que Discourse actúe como IdP para Riot a demostrar en Discourse que posees una cuenta existente de Riot/Matrix?

¿Podrías explicarlo un poco más? Ayer estuve investigando el SSO de Matrix y, finalmente, ahora tienen algo. Implementan tanto SAML como, en la rama develop, OAuth2. Discourse no puede funcionar como servidor en ninguno de los dos casos, solo como cliente, así que estuve considerando hacer que Discourse actúe como servidor OAuth2 o añadir soporte para el propio protocolo SSO de Discourse en Synapse. No estoy seguro de que esto solucione tus necesidades…

¿Existe alguna URL pública en Riot que el usuario pueda controlar? ¿Quizás una biografía de acceso público donde el usuario pueda insertar un código? De este modo, un plugin de Discourse podría generar un código que el usuario insertaría en su biografía; al ingresar su nombre de usuario de Riot, el sistema verificaría la existencia de ese código en URL/<riot-username>/bio.

Un sistema de este tipo permitiría un plugin de propósito bastante general que podría configurarse para múltiples sitios de terceros mediante algunas opciones del sistema.

El estándar que apoyo para adoptar es el “enlace bidireccional rel="me"”. Añade un enlace desde esa página a tu perfil de Discourse y otro desde tu perfil de Discourse a esa página; ambos sistemas rastrearán la otra URL, verán rel=me y la marcarán :white_check_mark: como verificada.

Se pueden establecer casos especiales para extraer el campo de biografía de plataformas que no implementen esto.

Me refiero a usar Discourse como IdP para mi propio programa independiente. Simplemente no estoy seguro de cuál es la mejor manera de vincular cosas como un ID de Riot Games, ya que aún no tienen una solución OAuth pública. Sé que acaban de anunciar RSO, pero no han dado una fecha para su disponibilidad pública.

Actualmente, para que las aplicaciones de terceros “verifiquen” una cuenta de Riot, los usuarios deben iniciar sesión en su cliente de League of Legends y cambiar un campo en la pestaña de configuración. Solo estaba tratando de encontrar una forma de ir desde Discourse a la API de League y luego agregar el campo de perfil personalizado una vez que se haya verificado.

Aquí está la parte donde entra el código para referencia. Básicamente, luego puedo llamar a la API de League y ver si el valor de este código coincide con el que se les indicó que usaran.

Además, estoy usando un sistema de inicio de sesión SAML para mi Discourse, ya que se integra con el resto de mi sitio web, y quería tener una forma de agregar nombres de usuario de Discord “verificados” de manera similar. De nuevo, no estoy muy seguro de cómo lograr que el usuario conectado en Discourse solicite un OAuth a través de Discord OAuth y luego cambie el valor en el lado de Discourse.

Espero que esto tenga sentido y muestre lo que estoy tratando de lograr. Si aún necesitas más información sobre lo que intento hacer, puedo proporcionarla. Solo quiero mostrar cuentas verificadas en los perfiles. Planeo tener Minecraft (Mojang), Discord y Riot Games (League of Legends), pero para mi caso de uso, necesitaría que fueran valores verificados para evitar la suplantación de identidad.

Creo que el vínculo entre Twitch y Riot utilizado para las pruebas beta de Valorant era OAuth2, en login. No estoy seguro de si puedes crear un client_id.

Bueno, eso parece factible con un plugin personalizado.

Eso debería funcionar con nuestra integración nativa de Discord. Solo habilita el inicio de sesión con Discord y los usuarios podrán vincular su perfil de Discord en sus perfiles.

Sí, actualmente no es público y aún está en etapas tempranas. Lo mencionaron en este artículo https://www.riotgames.com/en/DevRel/rso en su sitio para desarrolladores.

Eso fue lo que pensé, así que veré si puedo hacerlo funcionar.

La única razón por la que no estoy intentando usar la integración nativa con Discord es porque el resto de mis sitios web ya tienen autenticación a través de un IdP principal, y me gustaría que las personas solo crearan una cuenta para todo mi sitio web, si eso tiene sentido. Veré si puedo hacer que el plugin de League of Legends funcione y evaluaré qué tan difícil sería hacer lo que tengo en mente. Simplemente no estaba muy seguro de si existían formas de acceder y editar perfiles de usuarios desde una aplicación PHP o similar. En última instancia, solo estaba pensando en usar PHP para un sistema de inicio de sesión OAuth simple donde los usuarios inician sesión con Discord, pero tengo problemas con cómo “decirle” al script de PHP qué usuario inició la solicitud, a menos que pueda iniciar la solicitud a través de Discourse y que el script de PHP verifique que sea legítimo.

Muchas gracias a todos por sus respuestas aquí. Aún soy nuevo en la gestión de mi propio Discourse y aprecio mucho toda la ayuda. :smiley:

Bueno, tendré que investigar si los plugins tienen más acceso que los programas externos a través de la API, ya que no pude encontrar ninguna forma de editar un campo de usuario mediante la API en https://docs.discourse.org/.