基本上,我想让用户验证他们是否拥有某些不支持 OpenID 或 OAuth 的社交账号(例如 Riot 账号)。实现这一点的最佳方法是什么?是否可以让用户将 Discourse 用作 OAuth 提供者,供外部应用程序通过其编辑数据库?我对 Discourse 还不太熟悉,因此正在思考实现此类功能的最佳方式。
我相信 @falco 在 Riot 方面很有经验?
哦,这确实是个有趣的问题。我们曾尝试过一种方法,就是使用 Keybase。他们本身就拥有一套成熟的身份验证系统,适用于多个平台。你可以在这里了解我们的实验:Discourse Keybase 验证。不过,自从 Zoom 收购了 Keybase 之后,情况如何我就不太确定了。
这部分有点令人费解。Discourse 作为 Riot 的身份提供商(IdP),如何帮助你在 Discourse 上证明你拥有现有的 Riot/Matrix 账号呢?
你能再多解释一下吗?我昨天研究了 Matrix 的单点登录(SSO),他们现在终于有了相关功能。他们同时实现了 SAML,并在 develop 分支上实现了 OAuth2。Discourse 既不能作为服务器与它们通信,只能作为客户端使用。因此,我考虑过是让 Discourse 充当 OAuth2 服务器,还是在 Synapse 中添加对 Discourse 自有 SSO 协议的支持。不过,我不确定这是否能满足你的需求……
Riot 是否提供某个用户可以控制的公开 URL?比如一个用户可插入代码的公开个人资料简介?这样,Discourse 插件可以生成一段代码,用户将其插入自己的个人资料简介中。当用户输入其 Riot 用户名时,系统会检查 URL/<riot-username>/bio 中是否包含该代码。
这样的系统可以支持一个较为通用的插件,通过一些系统设置即可配置为适配多个第三方站点。
我支持采用的标准是“双向链接 rel="me"
我的意思是,将 Discourse 作为我自己独立程序的身份提供商(IdP)。我只是不确定链接 Riot Games ID 这类信息的最佳方式,因为他们目前还没有公开的 OAuth 解决方案。我知道他们刚刚宣布了 RSO,但尚未公布其公开可用的日期。
目前,第三方应用程序要“验证”Riot 账户,需要用户登录《英雄联盟》客户端,并在设置选项卡下更改某个字段。我刚才只是在尝试寻找一种方法,从 Discourse 连接到 League API,然后在验证通过后添加自定义个人资料字段。
以下是代码部分,供参考。基本上,我随后可以调用 League API,检查该代码的值是否与他们被指示使用的值匹配。
另外,我的 Discourse 使用的是 SAML 登录系统,因为它与我的其他网站集成在一起。我想以类似的方式添加“已验证”的 Discord 用户名。同样,我不太确定如何让 Discourse 上的已登录用户通过 Discord OAuth 触发 OAuth 流程,然后在 Discourse 端更新相应的值。
希望这能解释清楚我的意图。如果你还需要更多关于我想做什么的信息,我可以提供更多。我目前只想在个人资料中展示已验证的账户。我计划支持 Minecraft(Mojang)、Discord 和 Riot Games(《英雄联盟》),但为了我的使用场景,这些值必须经过验证,以避免身份冒充。
我认为用于《无畏契约》(Valorant)测试版发放的 Twitch 与 Riot 之间的链接使用的是 OAuth2,地址是 https://auth.riotgames.com/login。不确定您是否能自行创建 client_id。
嗯,这听起来可以通过自定义插件实现!
使用我们原生的 Discord 集成应该就能实现。只需启用 Discord 登录,用户就可以在其个人资料中关联自己的 Discord 账号。
是的,目前该功能尚未公开,仍处于早期阶段。他们在开发者网站上的这篇文章中提到了相关内容:https://www.riotgames.com/en/DevRel/rso。
我也是这么想的,所以我会尝试看看能否实现。
我没有尝试使用原生 Discord 集成的唯一原因是,我其他网站已经通过一个主身份提供商(IdP)实现了认证,我希望用户在整个网站中只需创建一个账户,这样更合理。我会尝试让《英雄联盟》插件运行起来,并评估实现我设想的功能的难度。我只是不太确定是否可以从 PHP 应用程序或类似环境中访问和编辑用户资料。最终,我原本只是想用 PHP 实现一个简单的 OAuth 登录系统,让用户通过 Discord 登录,但我目前遇到的问题是:除非我能通过 Discourse 发起请求,并让 PHP 脚本验证该请求的合法性,否则我无法“告知”PHP 脚本是哪个用户发起了请求。
非常感谢大家在这里的回复!我刚开始管理自己的 Discourse 论坛,非常感激大家的帮助。![]()
好吧,我得查一下插件是否比通过 API 的外部程序拥有更多权限,因为我在 https://docs.discourse.org/ 上找不到任何通过 API 编辑用户字段的方法。
