Oauth 2.0 该应用程序一直在请求“许可”;具有脱机访问权限”;,为什么?
在使用oAuth2授权应用程序并获得请求范围的权限后,每次尝试使用Google oAuth2登录时,我仍然会收到一个屏幕,询问我是否授予应用程序脱机访问的权限。一旦我允许它拥有它,它不应该再出现吗Oauth 2.0 该应用程序一直在请求“许可”;具有脱机访问权限”;,为什么?,oauth-2.0,google-oauth,Oauth 2.0,Google Oauth,在使用oAuth2授权应用程序并获得请求范围的权限后,每次尝试使用Google oAuth2登录时,我仍然会收到一个屏幕,询问我是否授予应用程序脱机访问的权限。一旦我允许它拥有它,它不应该再出现吗 我猜你的应用程序每次都有approval\u prompt=force来强制OAuth。由于用户已经授权了您请求的任何作用域,因此无需重复它们。然而,屏幕上不得不说些什么,因此在没有更好的想法的情况下,谷歌请求“离线访问” 只需确保您没有强制进行身份验证,您应该没事。您是否使用批准提示参数?如果您已经
我猜你的应用程序每次都有approval\u prompt=force来强制OAuth。由于用户已经授权了您请求的任何作用域,因此无需重复它们。然而,屏幕上不得不说些什么,因此在没有更好的想法的情况下,谷歌请求“离线访问”
只需确保您没有强制进行身份验证,您应该没事。您是否使用
批准提示
参数?如果您已经有刷新令牌,请尝试不再请求脱机访问。即使用户再次登录,刷新令牌也应保持有效,而不请求脱机访问
可以找到关于此的参考。此提示可能来自两个参数
- 访问类型(如果为“脱机”)
- 批准提示(如果为“强制”)
$client->setAccessType('online');
$client->setApprovalPrompt('auto') ;
这不是一个错误。这是谷歌oauth2的正常场景 第一道工序同意书如下:
- 如果浏览器中存在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”。您挽救了我的一天。非常感谢:)