Authentication 单点登录身份验证与授权

Authentication 单点登录身份验证与授权,authentication,oauth-2.0,single-sign-on,facebook-login,google-login,Authentication,Oauth 2.0,Single Sign On,Facebook Login,Google Login,我正在使用自定义工作流(重定向URL、服务器端解析等-无javascript)在我的网站上实现Facebook和Google SSO,我在Google中访问了令牌、令牌类型和过期令牌,并且从Google也访问了令牌,我不知道下一步如何验证用户。 我读了一些关于授权与身份验证的内容,Facebook和Google SSO是OAuth2,它提供授权,但不提供身份验证,从中我了解到,通过这种方式,我的web应用程序被授权代表用户做一些事情,但我不能确定用户就是我认为的那个人?我的主要来源是: >我的问

我正在使用自定义工作流(重定向URL、服务器端解析等-无javascript)在我的网站上实现Facebook和Google SSO,我在Google中访问了令牌、令牌类型和过期令牌,并且从Google也访问了令牌,我不知道下一步如何验证用户。 我读了一些关于授权与身份验证的内容,Facebook和Google SSO是OAuth2,它提供授权,但不提供身份验证,从中我了解到,通过这种方式,我的web应用程序被授权代表用户做一些事情,但我不能确定用户就是我认为的那个人?我的主要来源是:

>我的问题是,我应该做些什么来考虑用户登录。

谢谢你

在你的情况下,谷歌(和facebook)是认证者。该服务只是告诉您的应用程序,试图登录到您的系统的用户就是他希望出现的用户

假设您通过独特的电子邮件区分用户。 您的应用程序流应该是下一个:

  • 用户尝试使用google application do all redirection google flow stuff登录到应用程序,并给您令牌
  • 应用程序需要存储此令牌以备将来使用
  • 应用程序检查此用户的电子邮件是否显示在数据库中
  • 如果显示电子邮件并且google返回令牌(google成功验证您的用户),您可以在应用程序中登录该用户
  • 若数据库中并没有显示电子邮件,但google成功验证了该用户,你们可以将该用户(连同电子邮件)存储到你们的数据库中—注册—这是你们系统中的新用户

  • Facebook也是如此。当然,您可以将此逻辑扩展到更特定于您的应用程序

    SSO和OAuth是不同的。OAuth是授权协议。 你正在处理谷歌和Facebook oauth

    OAuth

    对于oauth,在成功验证(google/facebook)后,您将获得访问令牌。您可以使用令牌来维护用户会话

    有了这个令牌用户被授权后,现在您应该检查该用户是否存在于您的数据库中,如果存在,则验证该用户并重定向到您的应用程序

    SSO


    SSO是用户身份验证服务。有一些实现SSO的方法,比如kerberos SSO、ADFS SSO。

    我们不应该使用OAuth2访问令牌进行身份验证。 详情请参阅

    构建在OAuth2之上的OpenIDConnect可用于身份验证

    谷歌支持OpenIDConnect


    其基本思想是,在用户登录其Google帐户后,Google将向客户端应用程序(您的应用程序)颁发一个ID令牌。然后,您可以从此id令牌中提取用户信息(例如电子邮件、唯一用户id),并继续您的登录流程。

    谢谢您的回答。我不太明白,我有3个信息不能同时全部正确:1)OAuth2用于授权,而不是身份验证。2) Facebook和Google登录基本上都是OAuth2。3) Facebook和Google登录提供身份验证。所以我使用Facebook/Google登录,这是OAuth2,它不用于身份验证,但我可以使用它进行身份验证。为什么?我哪里弄错了?首先OAuth是用于授权的,例如,
    google
    。要登录,您需要有效的google uName并通过google帐户的身份验证,然后只有您才能从oauth获得
    访问令牌