用谷歌登录总是要求用户同意

时间:2013-02-17 17:20:45

标签: codeigniter login oauth-2.0 google-oauth

我的公司有一个内部网络应用程序,它使用谷歌身份验证系统登录。它在大多数情况下运行良好,他们可以通过谷歌进行身份验证,同意我的应用程序访问基本用户详细信息,然后当它们返回到我的应用程序时,我确实可以获得他们的用户详细信息。

问题在于,我认为一旦他们同意,他们就不必每次都这样做。这是一个不正确的假设吗?就像现在一样,每次他们点击“使用谷歌登录”时,他们必须同意而不是重定向回我的应用程序。

我正在使用PHP(codeigniter)和在github上发现的非常好的Oauth lib(phil sturgeon的库的叉子)。是否有一些我应该通过的参数,以便用户在第一次之后不必每次都给予同意?

1 个答案:

答案 0 :(得分:15)

Google登录每次都不需要用户同意。如果您正在使用OAuth2登录程序,您应该能够第二次登录而无需重新批准:https://developers.google.com/accounts/docs/OAuth2Login

但是,在某些情况下,自动批准可能会被禁用,随后每次登录都需要用户同意。

第一个也是最常见的情况是,如果您的应用程序明确要求Google每次都提示同意。检查您的授权请求(您可能已从示例或示例代码中复制)是否包含'prompt = consent'或旧的非标准格式'approval_prompt = force'。删除这些参数(如果存在)可能会导致自动批准开始工作。

另一种情况是,您的重定向URL是基于“localhost”还是其他不属于全局DNS命名空间的URL。在这种情况下,出于安全原因,Google会在accounts.google.com域中的用户计算机上设置一个Cookie,以表明用户已授权_this_device_登录localhost(或本地域)上的'foo';只有在找到cookie时,Google才会自动批准不同意第二次请求。原因是“localhost”(或本地域,或未构建在全局DNS名称空间上的其他URL)的含义取决于设备,并且允许授权跨设备应用可能会带来安全风险。因此,如果您的公司已配置浏览器以在退出时清除所有Cookie,您使用的是非绝对网址,则您可能会看到您的用户每次都必须同意。解决方案是将您的端点托管在Internet有效的主机名上(主机不需要从Intranet外部访问,只需要主机名全局有效),或者您需要免除accounts.google.com饼干清算政策。