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

Posted

技术标签:

【中文标题】如何撤销 Discord OAuth2.0 中的令牌?【英文标题】:How to revoke a token in Discord OAuth2.0? 【发布时间】:2020-09-04 13:34:34 【问题描述】:

为了使用 Discord 的 API,我需要一个令牌,并打开一个链接,例如 https://discordapp.com/api/oauth2/authorize?client_id=<client_id>&redirect_uri=<redirect_url>&response_type=token&scope=identify

然后我将令牌设置为发出给 Discord API 的请求的 authorization(格式为 Bearer <token>)标头。

假设我想“注销”,这样就不能再使用某个令牌来执行此类请求。在这种情况下,我必须撤销该令牌,对吧?

所以在阅读了 Discord 的文档并进行了一些调整后,我决定我必须向 URL 发出 POST 请求,例如 https://discordapp.com/api/oauth2/token/revokecontent-type这个请求的header应该设置为x-www-form-urlencoded

当我这样做时,我从 discord 的服务器收到一条错误消息,其中包含 error: "invalid_client" 的消息

我做错了什么?

【问题讨论】:

【参考方案1】:

所以问题在于我发送的数据的实际格式。我正在发送 JSON 数据,因为我认为设置特定的标头会自动将数据转换为正确的格式,但事实证明我必须使用 FormData 对象以正确的格式创建数据,之后我还删除了我明确设置标题的行,在这些步骤之后一切正常。

【讨论】:

你能解释一下你是怎么做到的吗?我也在研究它,无法弄清楚。 @GaborSzita 我现在没有代码,但您可以简单地用谷歌搜索 FormData 示例。 FormData 应该使用 new 关键字创建。让数据 = 新的 FormData();等等。然后你可以添加你的 key:value 对,然后你可以发送它【参考方案2】:

如果您遇到这个问题并且想知道撤销令牌的完整 API 调用是什么,这里是:

POST https://discord.com/api/oauth2/token/revoke
Content-Type: application/x-www-form-urlencoded
data:
  client_id: <client_id>
  client_secret: <client_secret>
  token: <access_token>

【讨论】:

以上是关于如何撤销 Discord OAuth2.0 中的令牌?的主要内容,如果未能解决你的问题,请参考以下文章

discord.js 如何使用代码撤销对被禁止用户的禁令?

为通过 guilds.join 范围、Discord OAuth2.0 添加到公会的用户赋予角色

低代码如何构建支持OAuth2.0的后端Web API

低代码如何构建支持OAuth2.0的后端Web API

低代码如何构建支持OAuth2.0的后端Web API

Spring Security实现OAuth2.0授权服务 - 进阶版