该应用程序一直要求获得"离线访问"的权限,为什么?

jay*_*rjo 34 oauth-2.0 google-oauth

在使用oAuth2授权应用程序并获取所请求范围的权限后,我仍然会看到一个屏幕,询问我是否授予应用程序访问权限,以便每次尝试使用Google oAuth2登录时都具有脱机访问权限.一旦我允许它拥有它,是不是应该不再出现的东西?

在此输入图像描述

小智 13

这个提示可能是因为两个参数,

  • access_type(如果它是'离线')
  • approval_prompt(如果是'force')

确保你已将access_type设置为'online',并将apporoval_prompt设置为'auto'

 $client->setAccessType('online');
 $client->setApprovalPrompt('auto') ;
Run Code Online (Sandbox Code Playgroud)


小智 10

你使用approval_prompt参数吗?如果您已有刷新令牌,请尽量不要再次请求脱机访问.即使用户再次登录,它也应保持有效,而不请求脱机访问.

有关这方面的参考资料可以在这里找到.

  • 在localhost上进行开发时,行为似乎有所不同.无论"approval_prompt"值如何,您都将获得"具有脱机访问权限". (12认同)

pin*_*yid 7

我的猜测是你的应用每次都有appro_prompt =强制强制OAuth.由于用户已经授权您请求的任何范围,因此无需重复这些范围.然而,屏幕必须说些什么,所以在没有任何更好的想法的情况下,Google会要求"离线访问".

只要确保你没有强制认证,你应该没事.


小智 5

这不是错误.这是谷歌oauth2的正常情况.

第一个过程同意如下:

  1. 用户同意应用程序获取有关用户的信息.
  2. 当用户点击"接受"按钮时,浏览器会将同意信息保存到Cookie中,而Google帐户将保存权限(请查看https://security.google.com/settings/security/permissions)

从第二个过程:

浏览器检查谷歌帐户的cookie同意许可.

  • 如果Cookie存在于浏览器中且具有此应用程序的权限(https://security.google.com/settings/security/permissions):同意屏幕将被忽略
  • 如果cookie存在于浏览器中但没有此应用程序的权限:将显示同意屏幕
  • 如果浏览器中不存在cookie:应用程序将显示"具有脱机访问权限".