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

Google OAuth-如何检查用户是否已经允许访问我的应用程序,oauth,oauth-2.0,google-oauth,Oauth,Oauth 2.0,Google Oauth,简短描述: 如果用户已经授权我的应用程序OAuth访问他们的google配置文件,我想让他们不用每次登陆我的主页并自动登录时都按“使用google登录”按钮 若用户还并没有授予访问权限,我想向他们展示带有“使用谷歌登录”按钮的登录选项页面 详细描述: 我正在实现Google OAuth流,如此链接所述: 为了清楚起见,所讨论的流程如下: 向(客户端)用户显示“使用谷歌登录”按钮 用户按下按钮后,将他们重定向到google的OAuth 2.0服务器,在那里他们允许/拒绝我的应用程序访问他们的go

简短描述:

如果用户已经授权我的应用程序OAuth访问他们的google配置文件,我想让他们不用每次登陆我的主页并自动登录时都按“使用google登录”按钮

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

详细描述:

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

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

  • 向(客户端)用户显示“使用谷歌登录”按钮
  • 用户按下按钮后,将他们重定向到google的OAuth 2.0服务器,在那里他们允许/拒绝我的应用程序访问他们的google配置文件
  • 若用户允许访问,google会将它们重定向回我的应用程序
  • 我的应用程序(服务器端)使用获得的授权来获取访问令牌
  • 我的应用程序(服务器端)使用获取的访问令牌访问用户的配置文件
  • 我希望实现以下目标:

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

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

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

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

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

    谢谢。

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

    见本规范第3.1.2.1章

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

    • 无-不提示任何内容,如果无法进行静默登录,则重定向回错误“需要登录”或“需要交互”
    • 登录-强制登录提示,即使用户已登录
    • 同意-强制同意提示,即使用户过去已提供同意
    • 选择_账户-显示账户选择提示

    这听起来更像是应用程序端的会话管理/cookie问题,而不是OAuth登录问题。此外,在设备(甚至浏览器)之间维护会话状态几乎是不可能的。你的应用程序使用什么平台?它是AngularJS(客户端)+Web API(服务器)。我不相信我正在尝试维护设备之间的会话。我唯一想实现的就是在满足以下两个条件时自动登录用户:1。用户在当前计算机上登录谷歌,2:用户已批准访问我的应用程序(在当前计算机或任何其他计算机上)。用户授予我的应用程序对其google帐户的访问权这一事实与会话无关。它存储在他们的谷歌个人资料中。你正在使用谷歌登录客户端吗?如果是这样,在初始化GoogleAuth对象之后,您可以检查客户端是否已经使用
    isSignedIn.get()
    登录,或者通过检查
    currentUser.get()
    返回的GoogleUser上的
    hasGrantedScopes()
    来检查他们是否已经授权了您的应用程序。如果他们未登录或未向您的应用程序授予作用域,请不要自动执行此过程。@ZanyCadence,感谢您提及此选项。你介意在这里粘贴一个上述GoogleAuth图书馆主页的URL吗?太赫兹。@typhonofdvina你解决这个问题了吗?看起来这就是我要找的。让我仔细阅读文档并验证解决方案。@typhonofdvina你有什么想法吗,我正在尝试得到同样的结果。所以这确实有效,谢谢你@Vilmantas。然而,现在我对OAuth2.0和由google实现的OpenIDConnect之间的关系感到非常困惑。在我使用的示例中,没有提到“post”参数,但它仍然有效。这个参数显然是openid的一部分,而不是oauth2.0。那么为什么它与OAuth2.0一起工作呢?“OpenIDConnect 1.0是OAuth2.0协议之上的一个简单身份层。”而不是相反。我真的很困惑。是的,“OpenID连接”是OAuth2扩展。不要将其与原始OpenID混淆。