javascript - Google 登录 API 不对称 - 泄露用户帐户
问题描述
我正在开发一个 SPA,它依赖于 Google 的登录 javascript 库来验证用户身份。一位用户提交了一份错误报告,称该应用在共享计算机上展示我们的产品时泄露了她的 Google 电子邮件帐户。
我注意到其他网站也有同样的症状,所以我的示例案例将使用 medium.com。
重现:
- 访问您当地图书馆的公共计算机。
- 打开铬
- 浏览到 mail.google.com 并查看没有用户登录。
- 访问 medium.com 并使用 Google 帐户登录。
- 退出 medium.com
- 这是登录和注销对称性结束的地方。此时您应该可以离开了。
- 再次访问 mail.google.com。看到您已自动登录。
似乎通过第 3 方网站进行身份验证也会登录 Google 的生态系统,然后在退出第 3 方网站后该帐户仍处于活动状态。
是否有一种通过不包含此副作用的 Google 帐户对用户进行身份验证的方法?
解决方案
用户正在登录 Google 和网站
当用户使用 OAuth(通过 Google)时,它会将他们重定向到 Google 的 OAuth 页面,其中包含一些数据......
嘿 Google,这个叫 Foo Bar 的人自称是 foobar@gmail.com。那正确吗?
然后,如果您已登录,Google 将回复“是”或...
等一下,他们没有登录——我会给他们一个登录屏幕来检查你
然后用户将登录Google而不是您的网站。如果登录成功,Google 将使用相关信息(如姓名、出生日期、电子邮件等)将用户重定向回您的网站。
现在都完成了伙计!Foo Bar是 foobar@gmail.com!这是他的详细信息:[在此处插入用户信息]
用户现在已登录 Google和您的应用程序。
当用户退出您的应用程序时,他们会保持登录到 Google,这会产生您正在谈论的结果。有一些方法可以自动退出 Google(在下面的链接中有详细说明),但我绝对不会推荐它们,因为用户可能会在另一个选项卡中打开 Gmail,你很可能会破坏他们的工作流程。你甚至可能会担心他们。(如果我无缘无故退出谷歌,我会的!)
推荐阅读
- java - 在使用 Java 8 流过滤列表期间返回空嵌套对象时设置值
- intellij-idea - IntelliJ Idea - 不编译类 - 但解析库
- oracle - BLOB 加载 Oracle - ORA-22288
- javascript - Javascript中的组合总和
- wordpress-gutenberg - 使用 wordpress/create-block 包创建块时出错
- swift - 如何在 SwiftUI 的列表中删除部分中的项目
- npm - 纯 CSS npm 项目的入口点应该是什么?
- android - 布局 XML 文件上的 android.support.v4.view.ViewPager 和 android.support.v7.widget.CardView 标记出错
- c++ - 如何包装(组合)提升 hana 地图并访问括号运算符(运算符 [])?
- laravel - Laravel 批量分离