【问题标题】:Google OAuth check if user logged out from GoogleGoogle OAuth 检查用户是否从 Google 注销
【发布时间】:2019-03-11 07:35:28
【问题描述】:

用户使用 Google OAuth 登录后 - 是否可以检查以后的用户是否从 Google 注销?

场景:

  1. 用户登录Google
  2. 用户使用Google OAuth 登录mysite.com,登录状态在会话中存储1 年
  3. 用户从Google注销,但忘记从mysite.com注销
  4. 一周后,有人偷走了用户的笔记本电脑。小偷将无法使用Google,但可以重新使用mysite.com 上的登录用户会话

不知道有什么办法可以防止这种情况发生?

我不想给用户增加这个负担 - 从mysite.com 注销他并要求每天重新登录。

想改用自动的东西,比如:

  • 当您使用 Google OAuth 登录时,您会获得某种 ID
  • 每天您都可以通过调用类似
  • 的方法来验证原始会话是否仍处于活动状态

google.com/api/is-original-session-still-active?id=ID

【问题讨论】:

  • 不存在从 Open 身份验证中注销的情况。如果您使用 Oauth2 登录您的用户,那么只要用户授予您访问其数据的权限,您就有一个有效的访问令牌和一小时有效的刷新令牌。 oauth2 != openid 连接
  • @DaImTo 谢谢。那么,如果用户将从 Google 中注销 - 刷新令牌会停止工作吗?否则我看不到刷新令牌如何帮助解决问题。我需要知道用户何时从 SAME 浏览器从 Google 注销,而不是何时撤消访问权限。
  • Oauth2 访问权限被授予独立于用户的应用程序。如果用户退出他们的谷歌帐户,刷新令牌将继续工作。谷歌不会告诉你用户是否退出了他们的账户。两者没有任何关系。即使您使用 openid connect 将用户登录到您的应用程序,谷歌也不会告诉您用户是否退出了他们的帐户。

标签: oauth google-oauth


【解决方案1】:

注意:我怀疑您的术语不正确,我怀疑您使用 Openid connect 而不是 OAuth2 来登录您的用户。不过我会根据 Oauth2 回答这个问题,因为这就是你所说的你正在使用的东西。

Oauth2

Oauth2 用于授予应用程序访问用户数据的权限。使用 oauth2 令牌时,您代表用户行事。使用 Oauth2 令牌时实际上没有用户交互。

如果用户同意您的应用程序访问他们的数据,您将获得访问令牌和刷新令牌。访问令牌可以使用一个小时。刷新令牌的寿命很长,只要用户不删除您的同意并且您至少每六个月使用一次,您就可以访问用户数据。

由于 Oauth2 没有用户交互,因此无法使用它来查看用户是否已登录其帐户。实际上没有 Google api 可以为您提供此信息。这将 IMO 被视为隐私用户信息,而不是谷歌应与第三方应用程序共享的信息。

建议

您可能需要考虑对您的应用程序进行一些更改。

  1. 在任何地方实现注销。如果用户更改了密码,那么他们登录的所有设备都应该自动重新进行身份验证。
  2. 您的会话应该只有一两周的时间,并且您应该启用滑动。
  3. 告诉您的用户取消您的应用程序对其数据的同意,这也将迫使他们必须重新登录。

【讨论】:

    【解决方案2】:

    如果您的应用使用“通过 Google 登录”,特别要了解可能影响您应用用户的用户帐户安全事件,请考虑注册您的应用以接收Cross Account Protection 的事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2018-10-23
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多