找出谁使用 OAuth 重定向 uri 邀请了我的机器人服务器

Posted

技术标签:

【中文标题】找出谁使用 OAuth 重定向 uri 邀请了我的机器人服务器【英文标题】:Find out who invited my bot the server using OAuth redirect uri 【发布时间】:2021-11-20 02:59:37 【问题描述】:

在有人将此问题标记为重复之前,

是的,我知道审核日志是一回事。 不,我不会使用它,因为它需要许可。 是的,找到服务器所有者更容易 不,我需要确切知道是谁邀请了我的机器人

我想: 使用邀请链接重定向找出谁邀请了我的机器人服务器(用户-公会 ID 对)。 我读到了OAuth2 API,但由于缺乏背景知识,我不太了解它。 我所了解的是,机器人邀请链接可以具有重定向 uri, 并且一些信息在认证后被转移到它。 是否可以从中获取用户/公会 ID?

我试过了: 使用python -m http.server设置http服务器, 将我的 IP 添加到开发页面中的重定向 uri 列表并生成包含重定向到我的 IP 的邀请链接。 但是在使用该链接邀请我的机器人后,我没有被重定向到我的 http 服务器, 在 http 服务器控制台上也没有打印任何内容。

【问题讨论】:

【参考方案1】:

注意事项: A. 请勿出于任何目的泄露您的客户机密或您的机器人令牌。如果这样做,请立即从开发人员门户重新生成它们。 B. Code 和 token 在下面的答案中有不同的含义。 C. 这不适合绝对的初学者,您应该对 Web 请求(特别是 GET 和 POST 请求)有一个大致的了解。您可能还需要托管网站处理重定向 URL。 D. 这不包括任何形式、方式或形式的安全问题。

    在开发者门户的机器人选项卡中,启用REQUIRES OAUTH2 CODE GRANT 选项。这可以防止机器人加入服务器,除非完成第 4 步。 然后使用 OAuth 选项卡生成具有身份和机器人范围的 OAuth URL。这对于在第 5 步中获取用户信息很重要。 当有人访问 URL、登录并选择服务器时,他们会被重定向到您的重定向 URL。此 URL 接收一次性代码作为 URL 参数,即 URL 将是<base_url>&code=code<other stuff>。设置网络服务器和处理请求取决于您(并且可能超出任何 SO 答案的范围;谷歌是您的朋友)。 然后此代码可用于获取令牌。 This link 解释了如何用代码交换令牌。它涉及使用应用程序的客户端 ID 和密码发送发布请求。两者都可以从不和谐的开发者门户中获得。响应还将包含有关公会的信息以及分别在字段“guilds”和“access_token”中的令牌。 向https://discord.com/api/v9/users/@me 发送一个get 请求,其标头包含Authorization: Bearer $token,其中令牌在步骤4 中获得。响应为JSON 格式并包含指定的用户数据here。注意:以上链接适用于最新的 API 版本 v9,可能会在未来版本中发生变化。

编辑: 可以手动修改 URL 以从 URL 中删除身份范围。只要您请求交换令牌代码,该机器人仍会加入服务器。在这种情况下,对/users/@me 的请求将失败,您将无权访问用户对象。如果请求失败并且状态码对应于未授权,应该很容易让机器人离开服务器。

【讨论】:

以上是关于找出谁使用 OAuth 重定向 uri 邀请了我的机器人服务器的主要内容,如果未能解决你的问题,请参考以下文章

用于 Facebook 应用登录的有效 OAuth 重定向 URI

如何为 Google OAuth 2 添加多个重定向 URI?

Flutter:Oauth2 - 重定向 uri 的问题

使用 Android 应用链接作为 OAuth2 重定向 URI

Google OAuth 重定向 uri 只能是 127.0.0.1/authorize

Oauth2 Instagram API“重定向 URI 与注册的重定向 URI 不匹配”