Discord API - 传回生成的 OAuth2 代码的随机“无效代码”错误

Posted

技术标签:

【中文标题】Discord API - 传回生成的 OAuth2 代码的随机“无效代码”错误【英文标题】:Discord API - random "invalid code" error passing back generated OAuth2 code 【发布时间】:2020-07-07 17:31:51 【问题描述】:

我已经在我的应用程序中使用授权码授权类型成功实现了 Discord 的 OAuth2 流程。最终用户导航到我的机器人的 Discord 的 OAuth2 链接,授权其访问,然后 Discord 使用 code 查询字符串将它们重定向回我的站点。然后,机器人通过查询 Discord 的 API 将此代码交换为访问令牌。可通过here 获取有关此过程的文档以供参考。

但是,大约每 50-100 个交换端点请求,我都会收到一个 403,错误为 invalid_grant,描述为 Invalid "code" in request. 坦率地说,我不明白代码是怎么写的Discord 系统提供的内容立即失效。同一用户可以再次完成该过程,第二次不返回错误。

出于绝望,我尝试切换开发人员仪表板中名为Requires OAuth2 Code Grant 的选项,看到它说“如果您的应用程序需要多个范围”,但它没有任何效果。我也尝试过无休止的调试,但每次出现的情况显然是随机的。奇怪的是,我在网上找不到有同样问题的人。

以下是我在 Node.js 中使用 superagent 库发出的请求。它与文档匹配并且完美运行,除了随机响应是描述的错误。

superagent.post('https://discordapp.com/api/v6/oauth2/token')
  .type('x-www-form-urlencoded')
  .set('Content-Type', 'application/x-www-form-urlencoded')
  .send(
    client_id: process.env.BOT_ID,
    client_secret: process.env.BOT_SECRET,
    grant_type: 'authorization_code',
    code,
    redirect_uri: process.env.OAUTH2_REDIRECT_URI,
    scope: 'identify guilds.join',
  );

我可以确认所有变量都符合它们的预期值。 redirect_uri 的值与使用的原始 URL 中的 redirect_uri 的值匹配。 code 是通过 OAuth2 流返回的 code 查询字符串的值。

我做错了什么(如果有的话)导致错误?


更新 1:

Discord 已将我引导至 API GitHub 存储库,我发现该问题已关闭 here。如果我收到任何有用的信息或完全解决问题(希望如此),已发表评论并将在此处更新。

【问题讨论】:

【参考方案1】:

您是否使用 OAuth2 链接邀请您的机器人到您的服务器 - 具有正确的权限?如果是这样,您是否在 main.js 文件中定义了令牌? IE。 bot.login(“YOUR_TOKEN_HERE”) 我建议不要切换“需要 OAuth2 代码授权”,因为一开始做任何事情都很痛苦。 请让我知道任何进展:)

【讨论】:

机器人没有被添加到服务器(我没有使用bot 范围)。尽管不需要实例化和登录客户端,但令牌(它是 API 所必需的)确实匹配。提供无效令牌时,会返回“未经授权”错误,这与我遇到的不同。我同意,这个选项很痛苦,所以我已经禁用了它。 抱歉,我在这个领域完全没有经验,无法提出任何进一步的解决方案 - 我希望这个问题得到解决。 GL

以上是关于Discord API - 传回生成的 OAuth2 代码的随机“无效代码”错误的主要内容,如果未能解决你的问题,请参考以下文章

discord oauth2 api 调用返回“405:不允许的方法”

向 Discord API 发送 OAuth2 请求时的 invalid_client

如何撤销 Discord OAuth2.0 中的令牌?

OAuth2:Discord API 总是以 "error": "invalid_grant" 响应

Discord Oauth 获取权限

使用 PKCE 登录 Discord OAuth 的过程