Oauth 2.0 “始终”;“有离线访问权”谷歌OAuth 2

Oauth 2.0 “始终”;“有离线访问权”谷歌OAuth 2,oauth-2.0,google-oauth,Oauth 2.0,Google Oauth,我正在尝试使用GoogleOAuth2API获取用户的配置文件。在用户身份验证之后,在“同意”页面上,我总是被要求“进行脱机访问” 浏览器中的URL如下所示:- 范围=电子邮件响应类型=代码和重定向uri= 在上面的URL中可以看到,我已将范围参数传递为“电子邮件” 佩奇说: “此作用域要求允许您的应用访问: 用户的Google帐户电子邮件地址。您可以访问该电子邮件地址 通过调用people.get返回电子邮件数组(或通过调用 people.getOpenIdConnect,它在中返回电子邮件属

我正在尝试使用GoogleOAuth2API获取用户的配置文件。在用户身份验证之后,在“同意”页面上,我总是被要求“进行脱机访问”

浏览器中的URL如下所示:-

范围=电子邮件响应类型=代码和重定向uri=

在上面的URL中可以看到,我已将范围参数传递为“电子邮件”

佩奇说:

“此作用域要求允许您的应用访问:

用户的Google帐户电子邮件地址。您可以访问该电子邮件地址 通过调用people.get返回电子邮件数组(或通过调用 people.getOpenIdConnect,它在中返回电子邮件属性 OIDC兼容格式)。Google应用程序域的名称(如果有), 用户所属的。域名作为域返回 来自people.get的属性(或来自getOpenIdConnect的hd属性) 电子邮件范围等同于并取代 范围。”

为什么每次都要求我离线访问


看起来您已将客户端注册为“本机应用程序”而不是“Web应用程序”。默认情况下,本机应用程序会获得一个刷新令牌,该令牌是一个长期存在的令牌,由于其固有的安全隐患,资源所有者会收到一个通知和一个同意屏幕。将您的客户端类型更改为“Web应用程序”,假设它是这样的…

有两个参数会导致此提示:

  • 访问类型(如果是“脱机”,则获取刷新令牌)
  • 批准提示(如果为“强制”)
可以找到关于这方面的参考资料


尝试将approval\u prompt参数更改为“auto”或将其添加到您的请求中,并将access\u type参数检查为“online”或将其添加到您的请求中。

如果您使用的是node js模块“everyauth”,您可以通过

.authQueryParam({ access_type:'online', approval_prompt:'auto' })

我也有同样的问题,在谷歌搜索了很长一段时间后,我发现了以下链接:


它建议删除重定向uri中的“localhost”,这对我很有效。

因为您正在重定向回http://localhost://。这是有意义的,因为任何请求重定向到localhost的应用程序显然都在本地运行


将其重定向到公共网址,您就不会感到困扰。

我已经用我的谷歌控制台页面的屏幕截图更新了这个问题。我已将生成的客户端id和seceret仅用于“web应用程序的客户端id”。也许您可以尝试使用新生成的客户端id,并仔细检查授权请求中的客户端id是否正确(=新的)?1答案不正确或缺少主要的本机和web应用程序都将返回刷新令牌。web可能需要离线提供访问类型。如果您使用的是隐藏的客户端库,例如PHP.no,它们都可以返回刷新令牌,但默认情况下一个会返回刷新令牌,另一个会在提供
access\u type=offline
时返回刷新令牌,我刚刚验证了新生成的client_id和secret也没有帮助,如果有未完成的令牌,就会发生这种情况。撤销它们来解决它。在这里,我没有看到在该页面的任何地方提到“localhost”。链接正确吗?这对我来说很有效,尽管我也没有在该链接中找到任何相关信息。这很有效!我编辑了我的hosts文件,添加了行
127.0.0.1localhost.com
,并将重定向uri更改为match,我想知道这个信息是否是最新的。我正在尝试脱机访问。我正在设置
access\u type=offline
approval\u prompt=force
但仍然没有乐趣。