凯文
注意:这是我第一次尝试实现社交登录API,因此感谢您的支持和帮助!
我正在开发一个Web应用程序,并且已经开发了一个登录和注册系统。现在,我正在考虑添加带有后端的Facebook和Google+登录。我浏览了他们的文档和其他教程,他们需要实现很多东西。
但是,由于我已经有了注册系统,所以我想做这样的事情:
- 在登录页面上具有社交登录按钮。
- 例如,当用户单击社交登录按钮并授权应用程序时,将从Google+返回用户数据。
- 现在,可以继续使用返回的数据(在用户授权后)并正常执行操作,而不是像获取用户ID,秘密ID并从我的服务器联系其服务器以进行令牌验证和获取数据那样进行OAuth过程用我已经拥有的注册系统进行注册?
这些是我在执行此操作时看到的优点:
- 不需要额外的代码或数据库字段,例如令牌ID等。
- 用户可以在需要时向自己的帐户添加密码,然后登录该网站或通过使用相同的电子邮件ID通过Facebook或Google+登录来访问其帐户。
- 只需使用一次社交登录提供商的API,即用户首次登录(从技术上将用户注册到该站点),就足够了。
我知道遵循完整的OAuth2实现时,优点是相同的,但是有什么区别呢?
现在我的问题是:
- 是否可以缩短如上所述的社交登录?
- 这样做会不会失去任何明显的优势(假设我已经有了一个注册系统)?
- 如果是,其他人是否会缩短他们网站上的流量?
赫尔姆
您提出的系统存在某些缺陷,特别是与安全性相关的缺陷。我会给你关键的答案:
从Google+或其他提供商获取客户端后,您将从客户端发送数据,并隐式使用您的注册过程。
这种方法是错误的,因为作为攻击者,我自己可以使用我的应用程序的clientid从google +发送数据。您会使用我发送的信息进行注册或登录吗?如果您这样做,我可以假装成为您系统中的任何人。
- 是否可以缩短如上所述的社交登录?
- 这样做会不会失去任何明显的优势(假设我已经有了一个注册系统)?
- 如果是,其他人是否会缩短他们网站上的流量?
- 否(请参见上面的原因)。
- 不会。您已经拥有适当的系统,您将不会失去优势。大多数站点都有一个用于正常注册的系统。他们通过利用oauth登录。有人会说密码很麻烦,但是所有著名的网站都提供登录名和密码,包括SO。
现在的问题来了,考虑到您已经拥有一个系统,如何简化oauth系统。
我建议您这样做(以Google为提供者)(以dot开头):
-
- 用户单击Google按钮。
- 用户被重定向到Google网站。
- 用户授予您权限。
- Google重定向并给您一个令牌。
-
- 您现在可以将信息和令牌发送到您的服务器。(您只需要发送令牌即可,因为后端将获取信息。否则,拥有您网站的有效google +令牌的用户可以向您发送任何信息)。
-
- 后端验证令牌,并匹配“ aud”等于您的客户端ID。或者可以通过图书馆进行。您只需要提供您的客户ID。
-
- 如果是Google+,后端会从令牌中获取个人资料信息(姓名,电子邮件),同时验证您可以将其存储为注册过程或登录过程(如果该电子邮件已经存在)的一部分。您还可以存储用户的google ID。这很有用,因为fb之类的提供商并不总是为每个帐户提供电子邮件。(对于某些fb,不要提供电子邮件,但在大多数情况下,它会向您发送电子邮件。)
-
- 后端发回会话信息或jwt令牌或任何其他有时间限制的进程,该进程告诉用户已登录。
您的用户也可以通过电子邮件登录。如果尚未注册,则需要注册。否则,使用“忘记”功能,他可以设置密码,也可以从帐户设置中设置密码。
如果同一用户通过其他提供商进行连接,则还需要小心,他需要在系统中拥有可以通过电子邮件处理的相同帐户。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
编辑于
我来说两句