如何在我的应用程序中使用 Discord OAuth2 进行用户管理和身份验证?
How do I use Discord OAuth2 for user management and authentication in my application?
我正在构建一个应用程序,我希望能够在其中使用 Discord 和 OAuth2 创建和验证用户。原因是:
- 该应用程序可以被视为 Discord 社区的“伴侣”应用程序,我是 运行,
- 我不希望用户或我自己必须处理用户名和密码
该应用程序由客户端桌面应用程序和后端服务组成。我对如何使用 Discord 授权用户有一个相当基本的了解:
- 客户端应用程序转到后端端点
/oauth/login
并且用户被重定向到 Discord 应用批准页面
- 用户确认并重定向到后端回调
/oauth/callback
,其中包含可用于获取一对访问和刷新令牌的代码。
坦率地说,从这一点来看,我对其余的身份验证应该如何工作有点困惑。我假设至少如下:
- 我需要在我的数据库中创建一个用户条目,至少有一个 UID(为简单起见,与 Discord 中的用户相同)、访问和刷新令牌对。如果已创建用户,请使用新令牌更新数据库。
- 只要应用程序需要来自 Discord 的用户信息,它就应该使用访问令牌。如果已过期,请将刷新令牌与 Discord 交换以获得新的令牌对。
但是现在呢?这只会根据 Discord 对用户进行身份验证。我想利用用户通过 Discord 进行身份验证这一事实来对我的应用程序进行身份验证。以下是我的一些一般性问题:
- 我是否为用户创建一个新令牌以用于对我的后端端点的后续请求?或者我 return 桌面客户端的 Discord 访问令牌?
- 令牌过期了怎么办?我是否还需要桌面客户端的“交换”端点来刷新令牌(可能只是转发到 Discord 以获得新令牌,具体取决于我之前问题的答案)。
这一切感觉应该是非常基本的,但我不在我的舒适区,需要一些帮助才能畅通无阻。
感谢阅读!
您自己的应用程序应该有效地拥有自己的会话系统。
最简单的可能就是使用 HttpOnly cookie-based 会话,它类似于 Redis 存储(如果这是一个玩具项目,则为 Memory 存储)。
服务器上的会话数据应包含有关当前登录用户的信息。您应该将不和谐访问和刷新令牌存储在数据库中。
处理刷新的最简单方法是在收到 401
响应后立即调用其刷新令牌端点。如果 discord 提供了有关访问令牌有效期的信息,您也可以抢先刷新,而不是仅在获得 401
时才执行此操作。您的服务器进行刷新,您不需要端点。
一般来说,我建议您的服务器处理所有与 discord API 的交互,而不是您的客户端。 (除了初始授权步骤)。
我正在构建一个应用程序,我希望能够在其中使用 Discord 和 OAuth2 创建和验证用户。原因是:
- 该应用程序可以被视为 Discord 社区的“伴侣”应用程序,我是 运行,
- 我不希望用户或我自己必须处理用户名和密码
该应用程序由客户端桌面应用程序和后端服务组成。我对如何使用 Discord 授权用户有一个相当基本的了解:
- 客户端应用程序转到后端端点
/oauth/login
并且用户被重定向到 Discord 应用批准页面 - 用户确认并重定向到后端回调
/oauth/callback
,其中包含可用于获取一对访问和刷新令牌的代码。
坦率地说,从这一点来看,我对其余的身份验证应该如何工作有点困惑。我假设至少如下:
- 我需要在我的数据库中创建一个用户条目,至少有一个 UID(为简单起见,与 Discord 中的用户相同)、访问和刷新令牌对。如果已创建用户,请使用新令牌更新数据库。
- 只要应用程序需要来自 Discord 的用户信息,它就应该使用访问令牌。如果已过期,请将刷新令牌与 Discord 交换以获得新的令牌对。
但是现在呢?这只会根据 Discord 对用户进行身份验证。我想利用用户通过 Discord 进行身份验证这一事实来对我的应用程序进行身份验证。以下是我的一些一般性问题:
- 我是否为用户创建一个新令牌以用于对我的后端端点的后续请求?或者我 return 桌面客户端的 Discord 访问令牌?
- 令牌过期了怎么办?我是否还需要桌面客户端的“交换”端点来刷新令牌(可能只是转发到 Discord 以获得新令牌,具体取决于我之前问题的答案)。
这一切感觉应该是非常基本的,但我不在我的舒适区,需要一些帮助才能畅通无阻。
感谢阅读!
您自己的应用程序应该有效地拥有自己的会话系统。
最简单的可能就是使用 HttpOnly cookie-based 会话,它类似于 Redis 存储(如果这是一个玩具项目,则为 Memory 存储)。
服务器上的会话数据应包含有关当前登录用户的信息。您应该将不和谐访问和刷新令牌存储在数据库中。
处理刷新的最简单方法是在收到 401
响应后立即调用其刷新令牌端点。如果 discord 提供了有关访问令牌有效期的信息,您也可以抢先刷新,而不是仅在获得 401
时才执行此操作。您的服务器进行刷新,您不需要端点。
一般来说,我建议您的服务器处理所有与 discord API 的交互,而不是您的客户端。 (除了初始授权步骤)。