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

时间:2015-11-08 19:22:45

标签: oauth oauth-2.0 google-oauth

简短说明:

如果用户已经授予我的应用OAuth访问他们的谷歌个人资料的权限,我想让他们不必每次登陆我的主页时按“使用谷歌登录”按钮并自动登录。

如果用户尚未授予访问权限,我想在登录选项页面中显示“使用Google登录”按钮。

详细说明:

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

Using OAuth 2.0 for Web Server Applications

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

  1. 现在(客户端)用户“使用谷歌登录”按钮
  2. 用户按下按钮后,将其重定向到谷歌的OAuth 2.0服务器,他们允许/拒绝我的应用程序访问他们的谷歌个人资料
  3. 如果用户允许访问,则Google会将其重定向回我的应用程序
  4. 我的应用程序(服务器端)使用获取的授权来获取访问令牌
  5. 我的应用程序(服务器端)使用获取的访问令牌访问用户的配置文件
  6. 我想实现以下目标:

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

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

    但这种方法存在问题。如果用户第一次访问我的页面(之前没有授予我的应用程序访问权限),他们也会被重定向到Google OAuth页面。但由于他们尚未授权访问,并且没有按任何按钮按钮,他们会最终盯着谷歌oauth服务器页面混淆不清楚,发生了什么。

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

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

    感谢。

1 个答案:

答案 0 :(得分:0)

添加"提示=无"初始OAuth重定向的参数。这样,如果用户尚未登录或未授予您的应用权限,Google将不会阻止。

http://openid.net/specs/openid-connect-core-1_0.html#AuthRequest

的第3.1.2.1节

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

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