【问题标题】:Google OAuth - How to check that user has already allowed access to my applicationGoogle OAuth - 如何检查用户是否已允许访问我的应用程序
【发布时间】:2016-02-09 10:37:44
【问题描述】:

简短说明:

如果用户已经授予我的应用程序 OAuth 访问他们的 google 个人资料的权限,我希望他们不必在每次登陆我的主页并自动登录时都必须按“使用 google 登录”按钮。

如果用户尚未授予访问权限,我想向他们展示带有“使用 google 登录”按钮的登录选项页面。

详细说明:

我正在按照此链接中的说明实施 Google OAuth 流程:

Using OAuth 2.0 for Web Server Applications

为了清楚起见,有问题的流程如下:

  1. 使用“使用 google 登录”按钮呈现(客户端)用户
  2. 用户按下按钮后,将他们重定向到 google 的 OAuth 2.0 服务器,他们允许/拒绝我的应用程序访问他们的 google 个人资料
  3. 如果用户允许访问,谷歌会将他们重定向回我的应用程序
  4. 我的应用程序(服务器端)使用已获得的授权来获取访问令牌
  5. 我的应用程序(服务器端)使用获取的访问令牌访问用户的个人资料

我想实现以下目标:

如果用户之前已经允许我的应用程序访问他们的 google 个人资料(在当前计算机或其他计算机上),我希望他们在导航到我的应用程序后立即登录到我的应用程序(使用 google)应用程序的 URL。无需点击任何东西。

这乍一看不是问题。为此,我将自动执行上述流程的第 1 步和第 2 步。用户将被自动重定向到谷歌 oauth 服务器 - 无需按下“使用谷歌登录”按钮 - 在他们导航到应用程序的 URL 之后。反过来,Google 会立即通过有效授权将用户重定向回我的应用程序(同样不需要用户的任何输入)。其余的保持不变。用户会有立即登录的印象。

这种方法有一个问题。如果用户第一次访问我的页面(之前没有授予我的应用程序访问权限),他们也会被重定向到 google OAuth 页面。但是由于他们还没有授予访问权限,也没有按下任何 sing in 按钮,他们最终会盯着 google oauth 服务器页面,一头雾水,不知道发生了什么。

是否有一些 API,我可以通过这些 API 检测到用户尚未授予对我的应用程序的访问权限(我应该首先向他显示唱歌按钮)?

如果您的解决方案涉及一些 API 调用,请指出一个 HTTP/REST API,因为我不使用(也不想使用)任何更高级别的 OAuth 库。

谢谢。

【问题讨论】:

  • 这听起来更像是您应用端的会话管理/cookie 问题,而不是 OAuth 登录问题。此外,维护设备(甚至浏览器)之间的会话状态几乎是不可能的。您的应用使用什么平台?
  • 它是 AngularJS(客户端)+ Web API(服务器)。我不相信我正在尝试维护设备之间的会话。我唯一想要实现的是在满足两个条件时自动登录用户:1.用户在当前计算机上登录谷歌,2:用户已经批准访问我的应用程序(在当前计算机或任何其他计算机上)。用户已授予我的应用程序访问他的 google 帐户的权限这一事实与会话无关。它存储在他们的谷歌个人资料中。
  • 您使用的是 Google 登录客户端吗?如果是这样,在初始化 GoogleAuth 对象后,您可以检查并查看客户端是否已使用 isSignedIn.get() 登录,或者您可以通过检查返回的 GoogleUser 上的 hasGrantedScopes() 来检查他们是否已经授权您的应用程序currentUser.get()。如果他们未登录或未向您的应用授予范围,请不要自动执行该过程。
  • @ZanyCadence,感谢您提及此选项。您介意在此处粘贴上述 GoogleAuth 库的主页 URL 吗?谢谢。
  • @TyphoonOfDvina 这个问题你解决了吗?

标签: oauth oauth-2.0 google-oauth


【解决方案1】:

将“prompt=none”参数添加到您的初始 OAuth 重定向。这样,如果用户未登录或未授予您的应用权限,谷歌将不会阻止。

请参阅http://openid.net/specs/openid-connect-core-1_0.html#AuthRequest 的第 3.1.2.1 章

其他可能的“提示”值的简短摘要:

  • none - 不会提示任何内容,如果无法进行静默登录,则会返回错误“login_required”或“interaction_required”。
  • login - 强制登录提示,即使用户已登录。
  • 同意 - 强制同意提示,即使用户过去已提供同意。
  • select_account - 显示帐户选择提示。

【讨论】:

  • 看起来就是我要找的东西。让我彻底阅读文档并验证解决方案。
  • @TyphoonOfDvina 你有什么想法吗,我也想得到同样的东西。
  • 所以这真的有效,谢谢@Vilmantas。但是,现在我对 google 实现的 OAuth 2.0 和 OpenID Connect 的关系感到非常困惑。在我使用的official google documentation of OAuth 2.0 中,没有提及“post”参数,但它仍然有效。此参数显然是 Open ID 的一部分,而不是 OAuth 2.0。那么为什么它适用于 OAuth 2.0? “OpenID Connect 1.0 是 OAuth 2.0 协议的一个简单的身份层ON TOP。”而不是相反。我真的很困惑。
  • 是的,“OpenID Connect”是一个 OAuth2 扩展。不要将其与原始 OpenID 混淆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多