“假”OAuth提供商?

您好 :wave: 我想知道我尝试做的事情是否可行。

所以,我想将 Minecraft 账户与 Discourse 账户关联起来,就像您可以添加 Discord、Google 等一样,但 Minecraft 目前没有 OAuth 系统(也许一旦所有人都迁移到 Microsoft 账户,但这需要等待一段时间)。所以,我提出的系统是让用户输入一个他们将在游戏中获得的随机生成的代码。是否可以将此添加到他们的账户中,就像其他已连接的账户一样?我可能会像 https://mc-oauth.net/ 那样构建它,但不是登录,而是使用聊天命令。

如果这可行的,您有什么关于如何完成这项工作的建议吗?我 pretty much just would need a modal popup asking for the code → validate code → get UUID and store as external account identifier。

编辑:实际上,随着向 Microsoft 账户的过渡,我可能能够修改现有的 Microsoft 账户插件来存储 Minecraft UUID。我得看看。

您或许可以使用自定义用户字段来实现此目的?Creating and configuring custom user fields

用户字段可以设置为在注册时必填,用于接受随机生成的代码。如果现有账户需要添加代码,用户字段也可以在注册后在其个人资料设置中进行编辑。

2 个赞

哦哦哦,我确实没考虑到这一点。感谢你的想法——我之所以寻找 OAuth 方法,主要是因为可以通过外部 ID 检索用户。我将看看是否能通过用户字段检索用户。

编辑:好的,我确实可能有一种方法可以使用自定义字段来做到这一点。我可能只需要使用外部数据库,并自己想办法从 Minecraft UUID 请求 Discourse 用户。我只是对 Discourse 的限制了解不够,不知道是否有更好的方法。

编辑 2:嗯,我没有看到可以通过 API 编辑自定义用户字段的方法。我理想中希望它只能通过 API 设置,这样就能保证他们拥有该帐户。我可能只需要创建一个外部数据库,并通过其他方式进行帐户关联。

1 个赞

这听起来像是您想实现自己的 OAuth 提供商?

就像这里的图表一样:

听起来您的自定义机制将取代“OAuth2 目录”。

(使用 DiscourseConnect 可能会更简单)

当然,这一切都取决于您已经如何为网站实现身份验证……

另一方面,这样做可能过于复杂——我们确实支持仅限员工的自定义字段,这可能适合此处。

2 个赞

是的,我想我唯一的主要问题是,如果它是仅限员工使用,是否可以通过某个 API 路由来设置这些字段?我找不到自动执行此操作的方法。

我在 docs.discourse.org 上找不到这方面的内容。所有通过网页浏览器进行的更改都使用相同的 API,因此我的建议是逆向工程所需内容

1 个赞

哦,那真的很有用——谢谢分享!所以,我进一步思考和研究了如何做到这一点,我正在考虑使用 OAuth 的 state 参数,让人们登录到他们的 Discourse 账户,然后使用该 state 将 Minecraft UUID 关联起来。该 state 将只是一个随机生成的值,它将与 Minecraft UUID 一起存在于数据库中。我认为这种方法应该可行。感谢大家提供的所有想法和资源!

1 个赞

由于我不需要从 Discourse 本身访问 Minecraft UUID,因此我最终创建了一个与 Discourse SSO 集成的外部系统。感谢您的帮助,如果您想看看我最终的解决方案,我已在此分享:here。也许有一天,当 Microsoft 账户成为所有 Minecraft 用户强制要求时,我会重新审视这个问题,因为届时肯定会有办法利用他们的 API 来实现相同的功能。

1 个赞