提问者:小点点

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


简短描述:

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

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

长描述:

我正在实现Google OAuth流,如此链接所述:

将OAuth 2.0用于Web Server应用程序

为了清楚起见,所讨论的流程如下:

  1. 向(客户端)用户显示“使用谷歌登录”按钮

我希望实现以下目标:

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

乍一看,这不是问题。为了实现这一点,我将自动化上述流程的步骤1和步骤2。用户导航到应用程序的URL后,将自动重定向到GoogleOAuth服务器,而无需按下“使用google登录”按钮。谷歌反过来会立即将用户重定向回我的应用程序,并提供有效的授权(同样不需要用户的任何输入)。其余的都一样。用户会有一种立即登录的感觉。

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

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

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

谢谢


共1个答案

匿名用户

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

见http://openid.net/specs/openid-connect-core-1_0.html#AuthRequest3.1.2.1章

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

  • 无-不会提示任何东西,重定向返回错误login_required或interaction_required如果不可能静默登录。
  • 登录-强制登录提示,即使用户已登录。
  • 同意-强制同意提示,即使用户在过去提供了同意。
  • select_account-当前帐户选择提示。