缩短社交登录流程

Kev*_*vin 5 oauth

注意:这是我第一次尝试实现社交登录 API,所以感谢您对我的包容和帮助!

我正在开发一个网络应用程序,并且已经开发了一个登录和注册系统。现在,我正在考虑添加 Facebook 和 Google+ 登录 - 带有后端。我浏览了他们的文档和其他教程,他们需要实现很多东西。

但是,由于我已经有一个注册系统,我想做这样的事情:

  1. 在登录页面上有社交登录按钮。
  2. 例如,当用户单击社交登录按钮并授权应用程序时,将从 Google+ 返回用户数据。
  3. 现在,是否可以仅使用返回的数据(在用户授权后)并执行正常操作,而不是继续执行 OAuth 过程(例如获取用户 ID、秘密 ID 并从我的服务器联系他们的服务器以进行令牌验证和获取数据)使用我已有的注册系统进行注册?

以下是我认为这样做的优点:

  1. 无需额外的代码或数据库字段(如令牌 ID 等)。
  2. 用户可以随时为其帐户添加密码并登录网站,或者通过 Facebook 或 Google+ 登录来访问其帐户(前提是他们使用相同的电子邮件 ID)。
  3. 使用社交登录提供商的 API 一次就足够了 - 用户第一次登录(技术上将用户注册到网站)。

我知道遵循完整的 OAuth2 实现的优点是相同的,但是它有什么区别呢?

现在我的问题是:

  1. 如上所述缩短社交登录是否可以?
  2. 这样做我会失去任何明显的优势吗(假设我已经有了注册系统)?
  3. 如果是,是否还有其他人缩短了其网站的流量?

khr*_*hrm 4

您提出的系统存在一定的缺陷,特别是与安全相关的缺陷。我会给你一个明确的答案:

从 google+ 或其他提供商获取数据后,您将从客户端发送数据,并隐式使用您的注册过程。

这种方法是错误的,因为我自己作为攻击者可以使用我的应用程序的 clientid 从 google+ 向您发送数据。您会使用我发送的信息注册或登录吗?如果你这样做的话,我可以假装成你系统中的任何人。

  1. 如上所述缩短社交登录是否可以?
  2. 这样做我会失去任何明显的优势吗(假设我已经有了注册系统)?
  3. 如果是,是否还有其他人缩短了其网站的流量?
  1. 不。(参见上面的原因)。
  2. 不会。您不会失去优势,因为您已经拥有适当的系统。大多数网站都有一个用于正常注册的系统。他们利用它来提供 oauth 登录。有人会说密码很麻烦之类的,但是所有著名的网站都提供登录名和密码,包括SO。

现在问题来了,鉴于您已经有了一个系统,如何简化 oauth 系统。

我推荐这个(我假设谷歌作为提供商)流程,以点开头的事情是你需要做的:

    • 您有一个 Google 登录按钮。
  1. 用户点击 Google 按钮。
  2. 用户被重定向到 Google 网站。
  3. 用户给你许可。
  4. Google 会重定向并给您一个令牌。
    • 您现在可以将信息和令牌发送到您的服务器。(您只需发送令牌,因为后端将获取信息。否则,拥有您网站的有效 google+ 令牌的用户可以向您发送任何信息)。
    • 后端验证令牌并匹配“aud”等于您的客户端 ID。或者它可以通过图书馆发生。您只需提供您的客户 ID。
    • 如果是 Google+(姓名、电子邮件),后端会从令牌中获取个人资料信息,同时验证您可以在注册过程或登录过程中存储哪些信息(如果该电子邮件已存在)。您也可以存储用户的谷歌ID。这很有用,因为某些提供商(例如 Facebook)并不总是为每个帐户提供电子邮件。(对于某些 Facebook 不提供电子邮件,但大多数情况下它会给您电子邮件。)
    • 后端发回会话信息或 jwt 令牌或任何其他时间有限的进程,告诉用户已登录。

您的用户也可以通过电子邮件登录。如果他还没有注册,那么他需要注册。否则,他可以使用忘记设置密码,或者从帐户设置中设置密码。

您还需要小心,如果同一用户通过不同的提供商进行连接,他需要在您的系统中拥有相同的帐户,您可以通过电子邮件进行处理。