实施 OAUTH2 最佳实践
Implementing OAUTH2 best practice
我正在尝试构建 OAUTH2 提供程序(如 discord/google),用户可以在其中创建具有 client_id
和 client_secret
的“应用程序”。在研究时我发现 OAUTH2 最适合这种事情。
现在令人困惑的部分是主登录页面如何工作?
我是否有自己的 /login
路由页面以及 POST
/login
来处理我自己的用户,这样我将有 2 个 table:
- MyOwnSession - 这将保留我自己的平台发布的访问令牌,完全有权 API
- OAuthSession - 颁发给第三方应用程序的令牌(跟踪
client_id
,并且 scope
他们拥有)(由 api/oauth2/token
颁发!!)
然后我的受保护路由如 /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_token
,refresh_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)
很确定这是唯一的答案。
我正在尝试构建 OAUTH2 提供程序(如 discord/google),用户可以在其中创建具有 client_id
和 client_secret
的“应用程序”。在研究时我发现 OAUTH2 最适合这种事情。
现在令人困惑的部分是主登录页面如何工作?
我是否有自己的 /login
路由页面以及 POST
/login
来处理我自己的用户,这样我将有 2 个 table:
- MyOwnSession - 这将保留我自己的平台发布的访问令牌,完全有权 API
- OAuthSession - 颁发给第三方应用程序的令牌(跟踪
client_id
,并且scope
他们拥有)(由api/oauth2/token
颁发!!)
然后我的受保护路由如 /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_token
,refresh_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)
很确定这是唯一的答案。