实施 OAUTH2 最佳实践

Implementing OAUTH2 best practice

我正在尝试构建 OAUTH2 提供程序(如 discord/google),用户可以在其中创建具有 client_idclient_secret 的“应用程序”。在研究时我发现 OAUTH2 最适合这种事情。

现在令人困惑的部分是主登录页面如何工作?

我是否有自己的 /login 路由页面以及 POST /login 来处理我自己的用户,这样我将有 2 个 table:

然后我的受保护路由如 /api/user 将同时检查 Authorization: Bearer <access_code> 并检查两个 table 以查看这是否是有效的访问令牌(有点多余?)

所以我很确定我将如何为客户端(第三方)实施 OAuth2 流程,但我对主要平台(OAUTH2 应用程序将赋予用户更改权)如何实现感到非常困惑密码,并创建新的 clients/applications) 句柄会话。

有什么建议吗?谢谢!

编辑:

好的,据我所知,这种事情没有真正的定义..

例如 Discord 有 POST /login 他们发送用户名 + 密码,并处理所有其他 2FA。

并单独处理OAUTH2。

简而言之,在构建自己的 OAUTH2 server/provider(例如,您想成为 Google accounts/Discord)来处理自己的登录时,您可以按照自己的意愿进行,然后 oauth2 路由仅供其他客户端(第三方?)使用

现在我正在为自己的项目做react-frontend,我也想有access_tokenrefresh_token更安全!但我认为与 OAUTH2 令牌共享相同的 table 并不明智,因为我的令牌将具有完全权限,并且 oauth2 令牌的范围仅限于其他应用程序(客户端第三方)的请求。

检查访问令牌在我的后端是否有效的最佳方法是什么?如果 access_token 存在,我猜检查两个 tables?或尝试将它们都放在一个 table 中(或使用 UNION 同时获得两者)

MyOwnSession - this will keep my own platform issued access tokens with full right over API

OAuthSession - tokens issued to third-party application (keeping track of client_id, and scope they have) (issued by api/oauth2/token!!)

您真的需要单独的令牌吗?您的应用程序将充当 OAuth2 提供商,并可以向您的应用程序和具有不同客户端 ID 的第三方客户端颁发令牌。您可以根据客户端 ID 控制访问权限。

正如我之前在编辑中提到的那样,似乎两个 table 策略是最好的(根据 discord 所做的)

现在不需要使用联合或两个选择,我们可以有多个 token_type,例如:Discord 有:

  • 机器人
  • 用户
  • 承载者

根据令牌类型,我们知道如何验证 access_token 提供的。

OAuth2 应该只担心向第三方提供访问权限,我们自己的登录应该以最适合我们应用程序的方式构建。

Bearer可能是OAuth2颁发的类型,User可能是用户实际登录我们平台时的令牌(不是third-party)

很确定这是唯一的答案。