2013-02-17 17 views
5

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

问题是,我认为一旦他们同意,他们不会每次都这样做。这是不正确的假设吗?就像现在一样,每次他们点击“使用谷歌登录”,他们都必须同意,而不是被重定向回我的应用程序。我正在使用PHP(codeigniter)和一个很不错的Oauth lib,它发现于github(phil sturgeon的库的fork)上。我是否应该传递一些参数,以便用户在第一次之后不必每次都表示同意?

回答

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_在本地主机(或本地域)上登录到'foo'; Google只会在找到cookie的情况下自动批准第二个请求。原因是“本地主机”(或本地域或其他URL不是基于全局DNS名称空间)的含义取决于设备,允许跨设备应用授权可能会带来安全风险。因此,如果您的公司已配置浏览器清除退出时的所有Cookie,请使用非绝对URL,您可以看到您的用户每次都必须同意。解决方案是将您的端点托管在互联网有效的主机名上(主机不需要从Intranet外部访问,只需要主机名全局有效),或者您需要豁免accounts.google.com cookie清除策略。

+0

谢谢布雷诺。潜入第三方库,它明确添加了approval_prompt = force。我没有在我读过的文档中看到过,但删除它确实解决了问题。像魅力一样工作,谢谢! – Greg 2013-02-18 22:13:12