"当app_type = online时,此应用程序希望:具有脱机访问权限"

Tza*_*ach 58 oauth-2.0 google-oauth

我有一个带有OAuth 2.0身份验证的Google App.一切都习以为常,但最近我开始获得以下"请求许可"屏幕:

在此输入图像描述

奇怪的是,当我通过时,我得到了这个屏幕access_type=online.再次,这曾经工作到最近.

这可能是什么原因?TIA

编辑:

要求的范围是:

https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了:

  • 有没有 access_type=online
  • 有没有 approval_prompt=auto

编辑#2:

这是我用来生成身份验证URL的python代码:

encoded_params = urllib.urlencode({
    "response_type" : "code",
    "client_id" : MY_CLIENT_ID,
    "scope" : " ".join(MY_SCOPES),
    "redirect_uri" : MY_REDIRECT_URI,
    "state" : random_security_token,
    "access_type" : "online",
    "approval_prompt" : "auto",
    })

auth_url = "https://accounts.google.com/o/oauth2/auth?" + encoded_params
Run Code Online (Sandbox Code Playgroud)

更新(10月14日):

即使使用新的范围,我仍然会获得同意屏幕.最近我得到了一个我用于身份验证的新设备.

amw*_*ter 29

我认为G会在您的应用请求令牌时执行此操作,并且对于相关示波器,用户仍然存在有效的访问权限或刷新令牌.

解决方案是通过发出此请求,在您完成它们时(在用户注销时或在对用户进行身份验证后立即)撤销令牌:

https://accounts.google.com/o/oauth2/revoke?token={token}
Run Code Online (Sandbox Code Playgroud)

您不必提供任何应用凭据,只需将令牌作为URL参数.

(此处的文档https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke)

我有同样的问题,似乎没有任何组合access_typeapproval_prompt值解决它.撤销令牌就可以了.

我不确定如何为您的应用撤销所有未完成的令牌,除非您碰巧存储它们.要使用您自己的用户帐户进行测试,您可以在此处手动撤消应用的现有令牌:

https://security.google.com/settings/security/permissions
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这为我节省了很多空的周期:).你帖子上的最后一个链接就可以了 (4认同)

dom*_*nik 19

Google最近更改了电子邮件范围.你应该更换

https://www.googleapis.com/auth/userinfo.email
Run Code Online (Sandbox Code Playgroud)

有:

https://www.googleapis.com/auth/plus.profile.emails.read 
Run Code Online (Sandbox Code Playgroud)

和:

https://www.googleapis.com/auth/plus.login
Run Code Online (Sandbox Code Playgroud)

然后离线访问应该消失.

也可以看看:

https://developers.google.com/+/api/oauth#email

警告:不推荐使用此范围.2014年9月1日之后,Google将不再支持此范围.有关详情,请参阅迁移至Google+登录.

这也会改变收到电子邮件地址的方式:

https://developers.google.com/+/api/auth-migration#email

另请注意,您必须在管理控制台中激活Google+ API才能实现此目的.

  • 嗯,我正在使用"电子邮件配置文件"作为我的范围字符串,但仍然获得"具有脱机访问权限"的权限请求.真的很奇怪它只发生在集成测试中,而不是手动发生.我在两种情况下运行相同的服务器环境并使用相同的Google凭据. (5认同)
  • 很好的答案,谢谢!实际上新的范围应该是`email`和`profile`,因为它们等同于问题中要求的范围. (4认同)

Ian*_*non 18

http://localhostredirect_urlOAuth请求的参数中使用将导致在每次登录后第一次进行身份验证时要求用户授予脱机访问权限.


CK *_*Tan 5

Tzach.为了在首次登录后不提示同意屏幕.您可能需要将此值传递给函数:

$ client-> setApprovalPrompt("auto");


pin*_*yid 1

我认为这个问题已经得到解答,但我现在找不到链接。

简而言之,Google 最近对范围进行了一些更改,以实现增量范围。这些更改的一部分是,如果您的应用程序导致身份验证提示,但用户已经进行了身份验证,Google 必须要求某些内容,因此要求离线访问。尝试设置

approval_prompt=auto
Run Code Online (Sandbox Code Playgroud)

以避免出现提示


归档时间:

查看次数:

23757 次

最近记录:

8 年,7 月 前