【问题标题】:The App keeps asking for permission to "Have offline access", why?该应用程序一直要求“离线访问”的权限,为什么?
【发布时间】:2014-02-01 12:52:29
【问题描述】:

在使用 oAuth2 授权应用并获取所请求范围的权限后,每次尝试使用 Google oAuth2 登录时,我仍然会看到一个屏幕询问我是否授予应用离线访问权限.一旦我授予它拥有它的权限,它不应该再次出现吗?

【问题讨论】:

  • 您要重定向到哪些 URL?
  • 什么意思?到处理授权代码并让用户登录的 URL。
  • 您将哪些参数传递给 Google 的 OAuth 端点?
  • github相关讨论;关于 IdentityServer 但与 Google OAuth2 相关的详细信息 github.com/IdentityServer/IdentityServer3/issues/2373

标签: oauth-2.0 google-oauth


【解决方案1】:

我的猜测是您的应用程序每次都强制执行 OAuth。由于用户已经授权了您请求的任何范围,因此无需重复它们。然而屏幕必须说些什么,所以在没有更好的想法的情况下,谷歌请求“离线访问”。

只要确保您没有强制进行身份验证,就可以了。

【讨论】:

  • 我检查了谷歌客户端库似乎默认发送approval_prompt=force。你是这个意思吗?我没有看到 url 中包含 word force 的任何其他参数。
  • 是的,就是这样。我已经编辑了答案以更正参数名称
【解决方案2】:

您使用approval_prompt 参数吗?如果您已经拥有刷新令牌,请尽量不要再次要求离线访问。即使用户再次登录,它也应该保持有效,而无需请求离线访问。

可以在here找到有关此的参考。

【讨论】:

  • 除了 - force 之外,approval_prompt 还有其他可能的值吗? Google 客户端库似乎默认发送它(必须检查源)。
  • 另一个值为auto
  • 在 localhost 上开发时的行为似乎有所不同。:无论approval_prompt 值如何,您总是会得到“离线访问”。
【解决方案3】:

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

  • access_type(如果是“离线”)
  • approval_prompt(如果是“强制”)

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

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

【讨论】:

  • 你拯救了我的一天。非常感谢:)
【解决方案4】:

这不是错误。这是google oauth2的正常场景。

第一流程同意如下:

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

来自第二个进程:

浏览器检查 google 帐户的 cookie 同意权限。

  • 如果 cookie 存在于浏览器中并且拥有此应用程序的权限 (https://security.google.com/settings/security/permissions):同意屏幕将被忽略
  • 如果 cookie 存在于浏览器中但没有此应用程序的权限:将显示同意屏幕
  • 如果浏览器中不存在 cookie:应用程序将显示“Have offline access”。

【讨论】:

    【解决方案5】:

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

    http://googleplusplatform.blogspot.com/2013/12/google-sign-in-improvements11.html

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 2015-04-20
      • 2011-01-23
      • 1970-01-01
      • 2014-11-21
      • 2015-08-04
      • 2014-01-09
      • 1970-01-01
      • 2018-03-02
      相关资源
      最近更新 更多