使用Google身份验证和Google Oauth 2.0登录单页应用程序

Aki*_*lov 10 authentication oauth-2.0 single-page-application google-oauth

我们正在开发SPA - 完整的客户端基础javascript应用程序,需要对用户进行身份验证才能访问内部.

正如我从搜索中发现的那样,我们可以将我们的身份验证机制外包并使用Google帐户.我从这个网站上了解到 https://developers.google.com/accounts/docs/OAuth2Login - 如何处理Google API和身份验证机制.

简而言之,我们需要:

  • 使用params向google url发送请求,要求用户允许SPA使用他们的个人数据
  • 如果成功,我们会从Google获得令牌
  • 我们可以使用此令牌来访问我们被要求并使用它的API.

这个描述得很好,我理解它并有一些JS代码来实现它.

我不明白.

我有一个应用程序与它的私人数据.我想使用用户的电子邮件作为登录或用户ID(无论如何调用它)来访问应用程序的内部,例如用户创建的任务,用户的配置文件等.因此,在我的SPA中显示用户创建的任务我需要用户的电子邮件查询数据库.

我想象下一个场景:

  • 用户点击Login with Google按钮
  • 我们获得一个令牌 - 这意味着用户已成功通过身份验证
  • 我们坚持用户和他的电子邮件与SPA合作
  • 当用户点击Logout我们清除所有访问数据

我应该在哪里坚持这些数据?

如果Forms Authentication我理解我们将登录/密码传递给服务器,如果它们与数据库匹配,我们创建Forms Ticket并将其存储在cookie中.

谷歌的身份验证是否有类似的案例?如果我将用户的电子邮件存储在cookie中,我认为出于安全原因这不是很好.如果我要保存令牌 - 我不确定为什么需要它以及如何在我的SPA中使用它,我在身份验证后没有使用任何Google API.

您是否有任何示例案例我们如何在类似案例中构建我们的流程?

谢谢.

小智 6

如果您只需要用户的电子邮件地址,那么最好使用OpenID而不是OAuth.OAuth提供对用户帐户和服务的访问权限,范围限定为特定资源或资源集.OpendID专为登录第三方服务而设计.然后,您可以从OpenID登录中提取用户的ID和电子邮件地址.注意:将始终发送ID,但在身份验证期间必须明确请求电子邮件地址.

Google还支持混合OpenID + OAuth方案,如果您需要进行身份验证,则可以在OpenID登录之上搭载OAuth请求.查看身份验证文档,了解两种协议的工作方式以及哪种方案更适合您的方案.

一旦您返回了电子邮件地址,您可能不应该将其保留在cookie中.通常建议的处理方法是将其添加为会话参数.这样只有会话cookie存储在客户端上,服务器可以使用它找到它需要的值.这个答案可以很好地解释这些差异,以及何时使用会话和cookie.