Oauth 2.0 将角色授予通过guilds.join范围、Discord OAuth2.0添加到公会的用户

Oauth 2.0 将角色授予通过guilds.join范围、Discord OAuth2.0添加到公会的用户,oauth-2.0,discord,Oauth 2.0,Discord,我想在我的网站上集成Discord的OAuth2.0,这样我就可以将用户添加到我的公会中,并赋予他们一个特定的角色 我搜索了开发人员门户文档,但没有找到任何内容。中介绍了Discord Oauth的实现。您可能希望将其与RFC6749一起阅读,以了解Oauth的总体工作原理 您不仅需要一个不和谐的“应用程序”,而且这个应用程序还需要一个您已经加入到讨论中的公会(即“服务器”)的bot帐户。bot需要在公会中拥有创建\u即时\u邀请和管理\u角色权限,并且bot帐户需要在角色列表中拥有高于其将分配

我想在我的网站上集成Discord的OAuth2.0,这样我就可以将用户添加到我的公会中,并赋予他们一个特定的角色


我搜索了开发人员门户文档,但没有找到任何内容。

中介绍了Discord Oauth的实现。您可能希望将其与RFC6749一起阅读,以了解Oauth的总体工作原理

您不仅需要一个不和谐的“应用程序”,而且这个应用程序还需要一个您已经加入到讨论中的公会(即“服务器”)的bot帐户。bot需要在公会中拥有
创建\u即时\u邀请
管理\u角色
权限,并且bot帐户需要在角色列表中拥有高于其将分配给用户的角色的角色。另一方面,您不需要将bot实际连接到Discord websocket网关

这些步骤将是:

  • 将用户发送到Discord的授权URL,使用查询参数标识您的应用程序,并请求
    标识
    协会。加入
    范围

  • 如果用户正确识别并批准请求,他的浏览器最终将重定向到您选择的指向后端服务器的URL。此URL作为授权URL中的参数提供,必须事先在应用程序控制面板中列出

    常见错误:重定向URL必须与白名单中的URL字符逐个匹配。一个是另一个的前缀是不够的

    当您收到重定向时,是时候检查(使用会话cookie或您正在使用的任何东西)该用户是否是您想要添加到您的公会的人

  • Discord将某些查询字符串添加到重定向URL,您的后端可以使用该URL来构造对Discord的令牌交换请求。在该请求中,您提供应用程序的机密凭据以及来自重定向的密码,并获得一个承载令牌,该令牌表示您的应用程序和您从该特定用户获得的权限的组合

    常见错误:令牌交换请求的参数之一必须再次为原始重定向URL。这必须与步骤1中使用的相同。它不能是不同的URL,即使您的应用程序的不同URL也被列入了白名单

    常见错误:令牌交换请求的大多数参数都在POST正文中,必须以
    application/x-www-form-urlencoded
    格式进行编码。有时,人们使用默认将数据编码为JSON的HTTP堆栈,并对它不起作用感到困惑。如果您发送的实际数据被序列化为JSON,则将
    应用程序/x-www-form-urlencoded
    放入
    内容类型
    标题中是不起作用的

    警告:您可能会发现一些代码示例试图在URL中而不是在文章正文中将令牌交换参数作为查询参数提供。Discord过去接受这一点,但现在不接受了

  • 使用您在令牌交换中获得的承载令牌进行身份验证。这将为您提供与您交谈的用户的不一致ID

  • 现在,您已经获得了发出请求所需的信息,该信息已通过您的固定bot令牌的验证,并且包含PUT正文中用户的承载令牌,这一次必须是JSON。您可以使用可选的
    角色
    参数来设置新成员将开始使用的角色

    常见错误:这应该是一个PUT请求,而不是POST

  • 我假设你硬编码(或配置)你管理的公会的ID和你分配的角色

    请注意,即使Discord id是(64位)整数,它们也应该在JSON体中序列化为字符串,以便与本机不支持如此大整数的JavaScript等语言兼容

    (有关步骤4和5的身份验证的详细信息,请参见)