始终"离线访问" | Google OAuth 2

时间:2015-01-20 18:02:59

标签: oauth-2.0 google-oauth

我正在尝试使用Google OAuth2 api获取用户的个人资料。用户身份验证后,在同意页面上,我总是被要求进行“离线访问”#34;

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

https://accounts.google.com/o/oauth2/auth 范围=电子邮件 &安培; RESPONSE_TYPE =代码&安培; REDIRECT_URI = https://localhost/google_oauth2_login&state=YbzrDo&client_id=asdfasdf-60qhnqf6asdfasdfasdfcopo3plhoj.apps.googleusercontent.com&hl=en-US&from_login=1&as=604c0f3asdfasdf

如上面的网址所示,我已将范围参数传递为' 电子邮件 '

Google Auth API页面说: -

  

"此范围要求您的应用可以访问:

     

用户的Google帐户电子邮件地址。您可以访问电子邮件地址   通过调用people.get,它返回电子邮件数组(或通过调用   people.getOpenIdConnect,返回电子邮件属性   符合OIDC标准的格式)。 Google Apps域名,如果有的话,   用户所属的。域名作为域返回   来自people.get的属性(或来自getOpenIdConnect的高清属性)。这个   电子邮件范围相当于并取代了   https://www.googleapis.com/auth/userinfo.email范围。"

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

enter image description here

Google API Console Page for WEB APPLICATION

5 个答案:

答案 0 :(得分:9)

我遇到了同样的问题,经过谷歌搜索很长一段时间后,我找到了这个链接:

"This app would like to: Have offline access" when access_type=online

它建议删除本地主机'在redirect_uri中,它适用于我。

答案 1 :(得分:7)

因为您要重定向回http(s):// localhost: / 。这是有道理的,因为任何请求重定向到localhost的应用程序显然都在本地运行。

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

答案 2 :(得分:2)

如果你使用节点js模块'everyauth',你可以通过

覆盖googles默认值
.authQueryParam({ access_type:'online', approval_prompt:'auto' })

答案 3 :(得分:1)

有两个参数可以导致此提示:

  • access_type(如果是'离线',获取刷新令牌)
  • approval_prompt(如果是'force')

可以找到关于此的参考here

尝试将approval_prompt参数更改为“自动”或将其添加到您的请求中,并将access_type参数检查为“在线”或将其添加到您的请求中。

答案 4 :(得分:0)

看起来您已将您的客户注册为" Native Application"而不是" Web应用程序"。默认情况下,本机应用程序获取刷新令牌,这是一个长期存在的令牌,资源所有者因其固有的安全隐患而获得通知和同意屏幕。将您的客户类型更改为" Web应用程序"假设它是什么......