单点登录身份验证与授权

时间:2017-04-08 07:58:17

标签: authentication oauth-2.0 single-sign-on facebook-login google-login

我正在我的网站上使用自定义工作流程实现Facebook和Google SSO(重定向网址,在服务器端进行解析等等 - 没有javascript)我已经达到了access_token,token_type和expires_in以及来自Google的id_token和我很困惑接下来要对用户进行身份验证。 我读了一些关于授权与身份验证的内容,而Facebook和Google SSO是OAuth2,它提供授权,但不提供身份验证,据我所知,我的Web应用程序有权代表用户执行某些操作,但我不能确定用户是我认为他是谁?我的主要来源是:OAuth Authorization vs Authentication

所以,我的问题是,我该怎么办才能考虑用户登录。

谢谢

3 个答案:

答案 0 :(得分:3)

在您的情况下,谷歌(和Facebook)是验证者。此服务只是告诉您的应用程序,尝试登录系统的用户是他想要出现的用户。

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

  1. 用户尝试使用谷歌应用程序登录应用程序执行所有重定向谷歌流程的东西,并为您提供令牌
  2. 应用程序需要存储此令牌以备将来使用
  3. 应用程序检查此用户的电子邮件是否在数据库中显示
  4. 如果出现电子邮件并且google返回令牌(Google会成功验证您的用户),则可以在您的应用中登录用户
  5. 如果电子邮件未在数据库中显示但谷歌验证用户成功,则可以将此用户(通过电子邮件)存储到您的数据库中 - 注册 - 这是您系统中的新用户
  6. 与facebook相同的流量。当然,您可以将此逻辑扩展为更具体的应用程序。

答案 1 :(得分:1)

SSO和OAuth是不同的。 OAuth是授权协议。 您正在处理Google和Facebook oauth。

<强>的OAuth

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

使用此令牌用户已获得授权,现在您应该检查数据库中是否存在用户,如果是,则验证用户身份并重定向到您的应用程序。

<强> SSO

SSO是用户身份验证服务。有办法实现SSO,如kerberos SSO,ADFS SSO。

答案 2 :(得分:0)

我们绝不应该使用OAuth2访问令牌进行身份验证。 详情请参阅 https://oauth.net/articles/authentication/

基于OAuth2的OpenIDConnect可用于身份验证。

Google支持OpenIDConnect https://developers.google.com/identity/protocols/OpenIDConnect

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