如何处理 OAuth 授权流程中的访问令牌?

How to handle access token in OAuth authorization flow?

我正在构建一个使用 Github OAuth 的应用程序,它使用授权流程。这是我第一次实施 OAuth,所以我只想确保我做的一切都是正确的。我在想象这样的事情:

用户点击Continue with Github。我们调用 GH url 并提供前端应用程序重定向 uri。该应用程序接受 code 并将其发送到服务器。它用它交换访问令牌,然后从 API 获取用户,获取 ID 并检查它是否存在于数据库中。如果是,它会创建一个 JWT 令牌并发送类似 [token...].

的响应

我希望它应该是这样。

问题是如果用户不存在怎么办。在那种情况下,我还想询问用户在我的应用程序中的用户名(以及接受 ToS 等)。所以我有两个选择:发回代码或发送访问令牌。

如果我发送代码,一旦用户填写了用户名,服务器将再次查询访问令牌。对我来说似乎是重复的。

但由于访问令牌是我的应用程序机密的函数,我对它是否在客户端犹豫不决。尽管这些说服了我:

那么最佳做法是什么?干杯!

不确定 GitHub 具体情况 - 但一般的自助注册行为是为了 GitHub 为您管理。登录后,您的应用程序将收到一个带有新用户 ID 的令牌。然后,您还需要在应用的后端创建该用户。我的文章可能会有所帮助 - 虽然它很棘手:https://authguidance.com/2017/10/02/user-data/