如何使用现有的电子邮件和密码登录机制来管理 Google OAuth?

How to manage Google OAuth with existing email and password login mechanism?

我有一个应用程序目前正在使用电子邮件和密码进行帐户身份验证。每当用户使用电子邮件和密码登录时,后端都会创建一个 JWT 会话令牌并将其 returns 发送到应用程序。

这很好用。现在,我正在尝试集成 Google 一键登录 [OAuth],我也想保留我现有的登录系统。

我不知道如何为数据库中的用户管理 session/authentication。我现有的用户 table 有:

Name, email, password, ...

在 OAuth 的情况下,我只会得到电子邮件和令牌。一旦我验证了令牌,我就没有密码可以保存了。那么,是否可以只在 external_unique_id 列中为用户保存 OAuth 唯一 ID 而不对密码执行任何操作(如将其留空)?

请帮助我了解如何管理此类系统。 尤其是在external_unique_id已经存在的情况下用户第二次尝试登录时如何处理流程。 我应该比较从 external_unique_id 提供的 OAuth 收到的唯一 ID 吗?

谢谢!

我们有几种验证方法,

  1. 授权服务器生成令牌和授权令牌: 客户端需要通过输入凭据从服务器获取令牌,服务器发回令牌。应用每次都需要连接auth server进行认证

  2. 授权服务器与其他应用共享数据库 一旦用户从 auth 获得令牌。服务器。他可以在其他资源服务器中使用它。本资源服务器直接从数据库中获取token,自行认证。

  3. 使用JWT授权。 客户端从 auth 获取生成的 Jwt 令牌。服务器。授权服务器可能会将 public 密钥共享给其他资源服务器。资源服务器可以使用 public 键来解码内容。由于只有授权服务器有私钥,所以只有auth.server才能生成正确的jwt内容

在我看来,您需要在数据库中创建一个新用户。

我不知道这是否是最好的方法,但您可以在用户 table 中创建一个新列,告诉您用户使用的登录方法(在本例中,google 或 api). 您真的不需要 google 唯一 ID,您只需要知道身份验证是否成功即可生成新令牌。 在第一次身份验证时,您需要根据 google 负载创建一个新用户。在下一个中,只需使用他的电子邮件让用户进入数据库,然后做任何你需要做的事情。