我们正在开发一个SPA - 完整的客户端基础javascript应用程序,需要对我们的用户进行身份验证才能访问内部。
正如我从搜索中发现的那样,我们可以外包我们的身份验证机制并使用 Google帐户。我从这个网站上学到了 https://developers.google.com/accounts/docs/OAuth2Login - 如何处理Google API和身份验证机制。
简而言之,我们需要:
这个描述得很好,我理解它并且有一些JS代码来实现它。
我不明白。
我有一个带有私人数据的应用程序。我想使用用户的电子邮件作为登录或用户ID(无论如何调用它)来访问应用程序的内部,例如用户创建的任务,用户的配置文件等。因此,在我的SPA中显示用户创建的任务我需要使用用户的电子邮件查询数据库。
我想象下一个场景:
Login with Google
按钮Logout
时,我们会清除所有访问数据我应该在哪里保留这些数据?
如果Forms Authentication
我知道我们将登录名/密码传递给服务器,如果它们与数据库匹配,我们会创建Forms Ticket
并将其存储在Cookie 中。
Google的身份验证是否有类似的情况?如果我将用户的电子邮件存储在Cookie中,我认为出于安全原因这不太好。如果我要保存令牌 - 我不确定为什么需要它以及如何在我的SPA中使用它,我在验证后没有使用任何Google API。
您是否有任何示例案例我们如何在类似情况下构建我们的流程?
谢谢。
答案 0 :(得分:5)
如果您只需要用户的电子邮件地址,那么最好使用OpenID而不是OAuth。 OAuth提供对用户帐户和服务的访问权限,范围限定为特定资源或资源集。 OpendID专为登录第三方服务而设计。然后,您可以从OpenID登录中提取用户的ID和电子邮件地址。注意:将始终发送ID,但在身份验证期间必须明确请求电子邮件地址。
Google还支持混合OpenID + OAuth方案,如果您需要进行身份验证,则可以在OpenID登录之上搭载OAuth请求。 Take a look at the authentication document to get an idea of how both protocols work and which is better for your scenario.
一旦您返回了电子邮件地址,您可能不应该将其保留在Cookie中。通常建议的处理方法是将其添加为会话参数。这样只有会话cookie存储在客户端上,服务器可以使用它找到它需要的值。 This answer has a good explanation of the differences and when you want to use sessions versus cookies.