Oauth 2.0 该应用程序一直在请求“许可”;具有脱机访问权限”;,为什么?

Oauth 2.0 该应用程序一直在请求“许可”;具有脱机访问权限”;,为什么?,oauth-2.0,google-oauth,Oauth 2.0,Google Oauth,在使用oAuth2授权应用程序并获得请求范围的权限后,每次尝试使用Google oAuth2登录时,我仍然会收到一个屏幕,询问我是否授予应用程序脱机访问的权限。一旦我允许它拥有它,它不应该再出现吗 我猜你的应用程序每次都有approval\u prompt=force来强制OAuth。由于用户已经授权了您请求的任何作用域,因此无需重复它们。然而,屏幕上不得不说些什么,因此在没有更好的想法的情况下,谷歌请求“离线访问” 只需确保您没有强制进行身份验证,您应该没事。您是否使用批准提示参数?如果您已经

在使用oAuth2授权应用程序并获得请求范围的权限后,每次尝试使用Google oAuth2登录时,我仍然会收到一个屏幕,询问我是否授予应用程序脱机访问的权限。一旦我允许它拥有它,它不应该再出现吗


我猜你的应用程序每次都有approval\u prompt=force来强制OAuth。由于用户已经授权了您请求的任何作用域,因此无需重复它们。然而,屏幕上不得不说些什么,因此在没有更好的想法的情况下,谷歌请求“离线访问”


只需确保您没有强制进行身份验证,您应该没事。

您是否使用
批准提示
参数?如果您已经有刷新令牌,请尝试不再请求脱机访问。即使用户再次登录,刷新令牌也应保持有效,而不请求脱机访问


可以找到关于此的参考。

此提示可能来自两个参数

  • 访问类型(如果为“脱机”)
  • 批准提示(如果为“强制”)
确保已将访问类型设置为“联机”,并将Approval提示设置为“自动”

 $client->setAccessType('online');
 $client->setApprovalPrompt('auto') ;

这不是一个错误。这是谷歌oauth2的正常场景

第一道工序同意书如下:

  • 用户同意应用程序获取有关用户的信息
  • 当用户单击“接受”按钮时,浏览器将把同意信息保存到cookie中,google帐户将保存权限(请查看)
  • 来自第二个进程:

    浏览器检查谷歌账户的cookie许可证

    • 如果浏览器中存在cookie并且具有此应用程序的权限():将忽略“同意”屏幕
    • 如果浏览器中存在cookie,但没有此应用程序的权限:将显示“同意”屏幕
    • 如果浏览器中不存在cookie:应用程序将显示“具有脱机访问权限”。

    根据增量身份验证机制及其设计,这很可能是非常正常的,其想法是如果用户已向应用程序授予权限,则无需显示相同的权限并要求用户批准


    您要重定向到哪些URL?您的意思是什么?重定向到处理授权代码并让用户登录的URL。您要传递给Google的OAuth端点的参数是什么?github上的相关讨论;关于IdentityServer,但Google OAuth2的详细信息我已检查,默认情况下,Google客户端库似乎会发送approval_prompt=force。这就是你的意思吗?我在url中没有看到任何其他参数包含单词force。是的,就是这个。我已经编辑了我的答案以更正参数名称,并且除了-force之外,还有其他可能的批准提示值吗?谷歌客户端库似乎默认发送它(必须检查源代码)。另一个值是
    auto
    。在本地主机上开发时,行为似乎有所不同。注意:无论
    approval\u prompt
    值如何,您将始终获得“Have offline access”。您挽救了我的一天。非常感谢:)