7

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

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

我正在使用 PHP(codeigniter)和在 github 上找到的一个非常好的 Oauth 库(phil sturgeon 库的分支)。是否有一些我应该传递的参数,这样用户就不必每次都同意,在第一次之后?

4

1 回答 1

18

谷歌登录不需要每次都需要用户同意。如果您使用的是 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”;如果 Google 找到 cookie,它只会自动批准不同意第二个请求。原因是“localhost”(或本地域,或其他不建立在全局 DNS 名称空间上的 URL)的含义是依赖于设备的,并且允许跨设备应用授权可能会带来安全风险。因此,如果您的公司已将浏览器配置为在退出时清除所有 cookie,并且您使用非绝对 URL,您可能会看到您的用户每次都必须同意。解决方案是将您的端点托管在 Internet 有效的主机名上(无需从 Intranet 外部访问该主机,只需该主机名需要在全球范围内有效),或者您需要将 accounts.google.com 从cookie 清除政策。

于 2013-02-18T04:09:01.987 回答