不一致Oauth2接收到“无效客户端”错误

hgncfbus  于 2022-12-17  发布在  其他
关注(0)|答案(2)|浏览(197)

我实现了Discord Oauth2,这样我的用户就可以通过Discord进行身份验证来登录我的网站。几个月来,一切都运行得很好,现在突然停止了工作。
根据Discord的oauth2说明https://discordapp.com/developers/docs/topics/oauth2#shared-resources,我能够成功获取用于交换访问令牌的访问代码。但是,当我尝试接收访问令牌时,收到“invalid_client”错误。
首先,我达到了这个终点:

https://discordapp.com/api/oauth2/authorize?client_id=${process.env.CLIENT_ID}&redirect_uri=http%3A%2F%2Flocalhost%3A5000%2Flogin%2Fdiscord%2Fcallback&response_type=code&scope=identify%20email%20gdm.join

它成功返回以下内容:

http://localhost:5000/login/discord/callback?code={some_access_code}

然后将访问代码发送回discord以获取访问令牌。下面是失败的代码:

export function getDiscordAccessToken(accessCode, call) {
  const redirect = call === 'login' ? process.env.DISCORD_LOGIN_REDIRECT : process.env.DISCORD_CONNECT_REDIRECT

  return new Promise((resolve, reject) => {

    axios
      .post(
        `https://discordapp.com/api/oauth2/token?client_id=${process.env.DISCORD_CLIENTID}&client_secret=${process.env.DISCORD_SECRET}&grant_type=authorization_code&code=${accessCode}&redirect_uri=${redirect}&scope=identify%20email%20gdm.join`
    )
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        // log error to db
        console.log("Here is your error: ", err.response)
        reject(err.response)
      })
  })
}

这段代码工作了几个月,没有任何问题。然后,突然它停止了工作。我甚至检查了不和谐的更改日志,可以在这里找到,https://discordapp.com/developers/docs/change-log,但我没有发现任何身份验证更改的参考。
您能提供的任何帮助都将不胜感激!

nbysray5

nbysray51#

查询参数应该在POST请求的BODY中,而不是oauth/token url的URL中。
Discord最近对oAuth2进行了更新,使其更加局限于标准,这意味着他们不再支持POST的URL中的参数,而是要求它们在正文和表单中编码(基本相同,但在正文中,没有前导?)。
因此,您基本上需要(未测试):

axios.post(
        `https://discordapp.com/api/oauth2/token`,       
        `client_id=${process.env.DISCORD_CLIENTID}&client_secret=${process.env.DISCORD_SECRET}&grant_type=client_credentials&code=${accessCode}&redirect_uri=${redirect}&scope=identify%20email%20gdm.join`
       )
j7dteeu8

j7dteeu82#

我知道这个问题已经回答过了,但是我复制了一个错误的密钥,只要确保你复制了正确的密钥。
密钥位于OAuth2选项卡下,而不是discord开发人员 Jmeter 板上的常规信息选项卡下。

相关问题