我正在尝试使用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范围。"
为什么每次都要求我进行离线访问?
答案 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)
有两个参数可以导致此提示:
可以找到关于此的参考here。
尝试将approval_prompt参数更改为“自动”或将其添加到您的请求中,并将access_type参数检查为“在线”或将其添加到您的请求中。
答案 4 :(得分:0)
看起来您已将您的客户注册为" Native Application"而不是" Web应用程序"。默认情况下,本机应用程序获取刷新令牌,这是一个长期存在的令牌,资源所有者因其固有的安全隐患而获得通知和同意屏幕。将您的客户类型更改为" Web应用程序"假设它是什么......