首页 > 解决方案 > 使用自定义 API 进行 OAuth 登录

问题描述

我有一个 heroku 服务器,我在其中托管一个使用 Discord OAuth 登录的网站来存储用户及其订阅。

我正在设计一个 api,以便与我在多个平台上创建的其他软件一起使用,例如移动应用程序 (React Native) 或 python 软件。这些其他软件只能由数据库中拥有订阅的用户使用。

我坚持使用身份验证,用户将通过 Discord 登录,api 将返回一个访问令牌以用于以下 api 请求。

如何使应用程序或 python cli 软件显示 Discord 登录页面,以便用户可以登录以确保拥有该帐户的是他们?

谢谢你。

编辑

我目前对如何做到这一点的理解是:

  1. 访问“/api/授权”
  2. 如果 req.user 存在,则返回用户 ID 和访问令牌,否则重定向到状态对象中 mode = 'api' 的 Discord 登录页面
  3. 在登录重定向时,如果 mode === 'api' 返回用户 ID 和访问令牌,否则进行正常登录

获取用户 ID 和访问令牌后,其余 api 请求将如下所示:

  1. 从 req.body 获取用户 ID 和访问令牌
  2. 如果用户 id 存在且访问令牌在同一行,则继续使用 api 代码

标签: node.jsapioauthoauth-2.0backend

解决方案


忽略这个

我见过两种方法。

  1. 在浏览器中打开一个指向身份验证流程的链接,并在 localhost 上设置一个 http 服务器。这是 CLI 应用程序的唯一方法。使用 http 服务器,您可以处理来自 Discord 的重定向。

  2. 在您的应用程序中嵌入 Web 视图并让用户在那里通过 OAuth 流程。您甚至不需要创建 http 服务器,因为您可以在 app.xml 中处理重定向。

不用说,您需要使用 OAuth 凭据来发布您的应用程序,因此我建议使用您在后端使用的其他设置。

更新的答案

如果您想使用 Discord 验证用户的身份:

  1. 在您的后端创建一个端点,该端点将生成一对令牌,一个是公共的,一个是半私有的。返回他们两个作为回应。
  2. 每次用户想要在您的应用程序中进行身份验证时,请使用该端点来检索令牌。
  3. 打开浏览器或使用 Web 视图为身份验证流程加注星标。使用 OAuthstate参数提供您的公共令牌。
  4. 流程完成后,使用您将在state现场获得的令牌将用户与一对令牌连接起来。
  5. 设置另一个端点,应用程序将使用半私有令牌调用该端点,如果流程成功完成,则获取您用于授权 Web 应用程序中的请求的任何内容(会话 ID?)。在 CLI 中,您可以显示“授权后按回车键”之类的消息,在带有 Web 视图的移动应用程序中,您可以使用 JavaScript 代码中的事件触发它。

为了安全起见,您应该在生成一对令牌时节省时间,并设置一个条件以在 10 或 15 分钟内完成整个流程。


推荐阅读