Google OAuth - 如何检查用户是否已允许访问我的应用程序

Typ*_*ina 6 oauth oauth-2.0 google-oauth

简短的介绍:

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

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

详细描述:

我正在按照此链接所述实施 Google OAuth 流程:

将 OAuth 2.0 用于 Web 服务器应用程序

为了清楚起见,相关流程如下:

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

我想实现以下目标:

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

乍一看这不是问题。为了实现这一目标,我将自动执行上述流程的步骤 1 和 2。用户导航到应用程序的 URL 后,将自动重定向到 google oauth 服务器,而无需按“使用 google 登录”按钮。谷歌反过来立即将用户重定向回我的应用程序并提供有效的授权(同样不需要用户输入任何内容)。其余部分保持不变。用户会有立即登录的印象。

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

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

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

谢谢。

Vil*_*kas 2

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

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

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

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