Meilleure façon d'ajouter des comptes tiers vérifiés au profil

En gros, j’essaie de permettre aux utilisateurs de vérifier qu’ils sont bien les propriétaires de certains comptes sociaux qui ne prennent pas en charge OpenID ou OAuth (comme un compte Riot, par exemple). Quelle serait la meilleure approche pour le faire ? Serait-il possible qu’un utilisateur utilise Discourse comme fournisseur OAuth pour une application externe qui modifie la base de données ? Je ne connais pas encore très bien Discourse, alors j’essaie de réfléchir à la meilleure façon de mettre en place quelque chose de ce genre.

Je crois que @falco a de l’expérience avec Riot ?

Ah, c’est un problème intéressant. Une approche que nous avons expérimentée consistait à utiliser Keybase pour cela. Ils disposent déjà d’un système robuste de preuve d’identité compatible avec de nombreuses plateformes. Vous pouvez lire nos expérimentations sur Discourse Keybase Proof. Je ne sais pas trop où en est la situation depuis que Zoom l’a racheté.

Cette partie semble un peu étrange. En quoi le fait que Discourse soit un fournisseur d’identité (IdP) pour Riot vous aiderait-il à prouver sur Discourse que vous possédez un compte Riot/Matrix existant ?

Pourriez-vous expliquer un peu plus ? J’ai examiné l’authentification unique (SSO) Matrix hier, et ils ont finalement quelque chose maintenant. Ils implémentent à la fois SAML et, sur la branche develop, OAuth2. Discourse ne peut pas communiquer en tant que serveur, seulement en tant que client, j’ai donc envisagé soit de faire agir Discourse comme un serveur OAuth2, soit d’ajouter la prise en charge du protocole SSO propre à Discourse dans Synapse. Je ne suis pas sûr que cela réponde à vos besoins…

Existe-t-il une URL publique chez Riot que l’utilisateur pourrait contrôler ? Par exemple, une bio publiquement accessible dans laquelle l’utilisateur pourrait insérer un code ? Dans ce cas, un plugin Discourse pourrait générer un code que l’utilisateur insérerait dans sa bio ; lorsque l’utilisateur saisi son nom d’utilisateur Riot, le système vérifierait la présence de ce code à l’adresse URL/<riot-username>/bio.

Un tel système permettrait de créer un plugin assez polyvalent, configurable pour plusieurs sites tiers grâce à des paramètres système.

La norme que je soutiens pour adoption est le « lien bidirectionnel rel="me" ». Ajoutez un lien de cette page vers votre profil Discourse, et un lien de votre profil Discourse vers cette page. Les deux systèmes parcourent l’autre URL, détectent rel=me et la marquent :white_check_mark: Vérifié.

Des cas particuliers peuvent être mis en place pour extraire le champ bio depuis des plateformes qui n’implémentent pas cette norme.

Je parlais de Discourse en tant qu’IdP pour mon propre programme autonome. Je ne suis simplement pas sûr de la meilleure méthode pour lier des éléments comme un identifiant Riot Games, car ils n’ont pas encore de solution OAuth publique. Je sais qu’ils ont récemment annoncé RSO, mais ils n’ont pas encore communiqué de date pour sa disponibilité publique.

Actuellement, pour que des applications tierces puissent « vérifier » un compte Riot, les utilisateurs doivent se connecter au client de League of Legends et modifier un champ dans l’onglet des paramètres. J’essayais simplement de trouver un moyen d’aller de Discourse vers l’API de League, puis d’ajouter le champ de profil personnalisé une fois la vérification effectuée.

Voici la partie du code à titre de référence. En gros, je peux ensuite appeler l’API de League et vérifier si la valeur de ce code correspond à celle qu’ils ont été invités à utiliser.

Par ailleurs, j’utilise un système de connexion SAML pour mon Discourse, car il est lié au reste de mon site web, et je souhaitais pouvoir ajouter des noms d’utilisateurs Discord « vérifiés » de manière similaire. Encore une fois, je ne suis pas tout à fait sûr de la marche à suivre pour inciter l’utilisateur connecté sur Discourse à lancer une authentification OAuth via Discord OAuth, puis à modifier la valeur côté Discourse.

J’espère que cela a du sens et montre ce que j’essaie d’accomplir. Si vous avez encore besoin de plus d’informations sur ce que je tente de faire, je peux en fournir davantage. Je souhaite simplement afficher des comptes vérifiés sur les profils. Je prévois d’inclure Minecraft (Mojang), Discord et Riot Games (League of Legends), mais pour mon usage, il faudrait que ces valeurs soient vérifiées afin d’éviter l’usurpation d’identité.

Je crois que le lien Twitch ↔ Riot utilisé pour les bêtas de Valorant utilisait OAuth2, sur login. Je ne suis pas sûr qu’il soit possible de créer soi-même un client_id.

Eh bien, cela semble réalisable avec un plugin personnalisé !

Cela devrait fonctionner grâce à notre intégration native de Discord. Il suffit d’activer la connexion via Discord, et les utilisateurs pourront lier leur profil Discord depuis leur profil.

Oui, pour l’instant ce n’est pas public et en est encore aux premiers stades. Ils en ont parlé dans cet article https://www.riotgames.com/en/DevRel/rso sur leur site pour développeurs.

C’est aussi ce que je pensais, donc je vais voir si je peux faire fonctionner cela.

La seule raison pour laquelle je n’essaie pas d’utiliser l’intégration Discord native, c’est que le reste de mes sites utilise déjà une authentification via un IdP principal, et j’aimerais que les gens ne créent qu’un seul compte pour l’ensemble de mon site, si cela a du sens. Je vais voir si je peux faire fonctionner le plugin League of Legends et évaluer la difficulté de réaliser ce que j’envisage. Je n’étais pas trop sûr de savoir s’il existait des moyens d’accéder et de modifier les profils utilisateurs depuis une application PHP ou similaire. Au final, je pensais simplement utiliser PHP pour un système de connexion OAuth simple où les utilisateurs se connectent avec Discord, mais je rencontre des problèmes pour indiquer au script PHP quel utilisateur a initié la demande, à moins de pouvoir initier la demande via Discourse et faire en sorte que le script PHP vérifie qu’elle est légitime.

Merci beaucoup pour vos réponses à tous ici. Je suis encore nouveau dans la gestion de mon propre Discourse et j’apprécie toute l’aide apportée. :smiley:

Eh bien, je devrai vérifier si les plugins ont plus d’accès que les programmes externes via l’API, car je n’ai trouvé aucun moyen de modifier un champ utilisateur via l’API sur https://docs.discourse.org/.