Discord OAuth2返回' {"错误":" access_denied"}'

时间:2018-03-30 15:30:01

标签: node.js express oauth oauth-2.0 discord

我目前走进了OAuth2的世界,并且了解了一些。我试图创建一个应用程序,您可以在其中授权Discord帐户并让它自动邀请您加入公会/服务器。

我正在使用Nginx代理后面的Express Web服务器,该代理已经配置并且像魅力一样工作。我使用名为' request'的Node.JS依赖项。向Discord服务器发出帖子请求。

当我允许应用程序(Discord Callback)时,以下代码将处理来自Discord的回调。回调将包含 GET 查询中的代码,该代码将转发到Discord令牌URL以接收访问令牌。此访问令牌允许应用程序对用户帐户执行操作,事情是,它不起作用,我将在下面解释。 : - )

// there would be another variable here named 'state'
// which essentially is another security feature but this
// definitely works. The state gets calledback from the 
// discord authorisation which is a hashed cookie
var clientId = '123' // Discord client ID (string to not lose accuracy)
var clientSecret = 'secretsauce' // Discord secret key
var code = req.query.code // received on router event (express)
var discordTokenURL = 'https://discordapp.com/api/oauth2/token'
var redirectUri = 'https://myapp.com/callback/discord' // redirect for when I allow my app to look at my data, or even when I refuse it

// dependency to make request
var request = require('request')

// post the data to the discord server
request.post({
  url: discordTokenURL,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  form: { grant_type: 'authorization_code', client_id: clientId, client_secret: clientSecret, code: code, redirect_uri: redirectUri }
},
  function (err, httpResponse, body) {
    if (err) {
      return console.error('server down or other error') // only errors when Discord server is down
    }
  res.send(body) // returns the server response ({"error": "access_denied"})
})

代码执行成功,没有任何错误。在Discord OAuth2文档中,我应该收到这样的回复:

{
  "access_token": "6qrZcUqja7812RVdnEKjpzOL4CvHBFG",
  "token_type": "Bearer",
  "expires_in": 604800,
  "refresh_token": "D43f5y0ahjqew82jZ4NViEr2YafMKhue",
  "scope": "identify"
}

不幸的是,我得到了一个看起来很可爱的人:

{"error": "access_denied"}

任何帮助都会得到大力赞赏,我已经查看过这么多篇文章并多次阅读API文档而且没有任何问题得到解决。我发现如果我设置了'grant_type'到' client_credentials,'它确实返回一个有效的响应,这肯定证实我最初认为我的服务器被IP禁止Discord是不正确的。不幸的是,' client_credentials'不符合我的目的,我需要'authorization_code。'

谢谢。 : - )

1 个答案:

答案 0 :(得分:0)

不要试图制作自己的Discord OAuth应用程序,只需使用护照和护照不一致来授权您的应用程序。

Passport可以轻松创建授权服务,并且广为人知。这是护照的链接:http://passportjs.org/

修改:固定链接