【发布时间】:2017-09-01 19:14:03
【问题描述】:
我对使用 Discord API 与 Discord 交互感兴趣。我会将他们的文档描述为“稀疏”,但也许我只是没有找对地方。我的大部分信息来自这个页面:
https://discordapp.com/developers/docs/topics/oauth2
我已经设置了我的 Discord 公会和应用程序(甚至是机器人,这可能是不必要的)。我的具体计划是允许用户授予我的站点权限以将他们添加到私人 Discord 公会/服务器。我的网站页面中有一个引用此 URL 的超链接:
这部分似乎运作良好。用户批准请求。然后,用户将在查询字符串中使用“代码”键值对发送回我的站点。我认为这个代码就是所谓的“授权代码”。那么如何使用此授权码将用户添加到我的公会?我在 Discord 网站上找到了这个页面:
https://discordapp.com/developers/docs/resources/guild#add-guild-member
从该页面我可以看到我需要向该 URL 发起 PUT:
https://discordapp.com/api/guilds/{guild.id}/members/{user.id}
但我不知道 {user.id}。我只有一个授权码。
它还说,“...前提是您拥有 guilds.join 范围内的用户的有效 oauth2 访问令牌。”我没有访问令牌。同样,我只有一个授权码。
所以在我看来,我需要以某种方式将此授权代码交换为访问令牌和用户 ID。有人可以告诉我该怎么做吗?我一直在试验以下网址,但不知道用什么方法(GET、POST 等)或发送什么参数:
https://discordapp.com/api/oauth2/token
因为我想了解它是如何工作的,所以我更愿意知道如何使用普通的 Web 请求(例如 HttpWebRequest 和 WebClient,而不是使用一些 OAuth 库)来做到这一点。
更新
我决定(选择性地)阅读这个 RFC:
https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3
我已经链接了我认为最合适的部分。似乎正确的程序是向以下 URL 和参数发送 POST 请求:
https://discordapp.com/api/oauth2/token
grant_type=authorization_code&code=[AuthorizationCode]&redirect_uri=[RedirectURI]&client_id=[ClientID]
这似乎也符合 Peter G 的回答。不幸的是,此请求失败并出现 401(未经授权)错误。所以我认为这是一个死胡同。我已经尝试了几次,但希望有一个解决方案。我收到了这个回复正文:
{"error": "invalid_client"}
我收到了这些标题:
连接:关闭
编译指示:无缓存
严格的传输安全性:max-age=31536000;包含子域
Alt-Svc:清除
CF-RAY:[RedactedJustInCase]
内容长度:27
缓存控制:无存储
内容类型:application/json
日期:格林威治标准时间 2017 年 4 月 7 日星期五 01:12:19
Set-Cookie: __cfduid=[RedactedJustInCase]; expires=18 年 4 月 7 日星期六 格林威治标准时间 01:12:19;路径=/;域=.discordapp.com; HttpOnly
服务器:cloudflare-nginx
通过:1.1 谷歌
【问题讨论】:
标签: c# oauth oauth-2.0 httpwebrequest discord