11

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

正如我从搜索中发现的那样,我们可以外包我们的身份验证机制并为此使用Google 帐户。我从这个站点 https://developers.google.com/accounts/docs/OAuth2Login - How to deal with Google API and mechanism for authentication了解到。

简而言之,我们需要:

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

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

什么我不明白

我有一个带有私有数据的应用程序。我想使用用户的电子邮件作为登录名或用户 ID(不管如何调用它)来访问应用程序的内部,例如用户创建的任务、用户的个人资料等。因此,在我的 SPA 中显示用户创建的任务我需要使用用户的电子邮件查询数据库。

我想象下一个场景:

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

我应该在哪里保存这些数据?

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

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

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

谢谢你。

4

1 回答 1

6

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

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

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

于 2013-01-15T21:50:55.680 回答