Oauth 2.0 YouTube API刷新令牌已被撤销,代码为“400”;无效的“授权”;(似乎没有理由)

Oauth 2.0 YouTube API刷新令牌已被撤销,代码为“400”;无效的“授权”;(似乎没有理由),oauth-2.0,youtube-api,Oauth 2.0,Youtube Api,这是我关于stackoverflow的第一篇文章。来了 我已经构建了一个服务器端PHP应用程序,其中包括读取/更改一个用户的YouTube帐户(更改标题文件)。用户通过OAuth 2进行身份验证。我一直在存储刷新令牌,并在访问令牌过期时成功地发出刷新请求 但现在,我似乎得到了一个错误,它与两件事巧合地相关: 用户上传新视频 周日晚上 我不知道这是否意味着什么 错误发生在尝试刷新访问令牌时,我使用与以前相同的刷新令牌的方法。详情如下: 错误消息: [status code] 400 [reas

这是我关于stackoverflow的第一篇文章。来了

我已经构建了一个服务器端PHP应用程序,其中包括读取/更改一个用户的YouTube帐户(更改标题文件)。用户通过OAuth 2进行身份验证。我一直在存储刷新令牌,并在访问令牌过期时成功地发出刷新请求

但现在,我似乎得到了一个错误,它与两件事巧合地相关:

  • 用户上传新视频
  • 周日晚上
我不知道这是否意味着什么

错误发生在尝试刷新访问令牌时,我使用与以前相同的刷新令牌的方法。详情如下:

错误消息:

[status code] 400
[reason phrase] Bad Request
[url] https://accounts.google.com/o/oauth2/token
[request] POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
User-Agent: Guzzle/2.8.6 curl/7.24.0 PHP/5.3.10
Content-Type: application/x-www-form-urlencoded

client_id=442147492209.apps.googleusercontent.com&client_secret=D7eLQ5b0Mo1Y8uZ30ReWYwls&grant_type=refresh_token&refresh_token=1%2FCLvAt8V_d9sZznpg5YZdJlOJ58ufbHKL4F5Lw8PiJOg
[response] HTTP/1.1 400 Bad Request
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Tue, 02 Oct 2012 16:28:24 GMT
Content-Type: application/json
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Transfer-Encoding: chunked

{
  "error" : "invalid_grant"
}
如果您想查看源代码,可以在github上查看。以下是进行刷新的相关行号:

(您会注意到,我添加了一个针对此错误的检查,并要求管理员重新授权应用程序……但这远远不够理想)

我看过的其他帖子是告诉人们使用approval\u prompt=force。。。所以我正在这么做

编辑: 我最新的怀疑是,由于每次管理员登录时我都请求脱机访问(approval\u prompt=force),因此我会不断生成新的刷新令牌(除非没有其他可用令牌,否则我不会记录这些令牌)。谷歌的OAuth是否有每个应用程序的最大“活动”刷新令牌数?或者类似的

谢谢

请从以下位置进行检查:

如果在尝试使用时收到无效的\u grant错误响应 如果是刷新令牌,则错误的原因可能是由于以下原因 原因:

  • 服务器的时钟与NTP不同步

  • 刷新令牌限制 已超过。应用程序可以请求多个刷新令牌以 访问单个Google Analytics帐户。例如,这是有用的 在用户希望在多个服务器上安装应用程序的情况下 并访问相同的Google Analytics帐户。在这种情况下,, 需要两个刷新令牌,每个安装一个。当 刷新令牌数超过限制,旧令牌变为 无效的如果应用程序尝试使用无效刷新 令牌,返回无效的\u授权错误响应。每个的限制 OAuth 2.0客户端和Google Analytics帐户的唯一对为25 刷新令牌(请注意,此限制可能会更改)。如果 应用程序继续为相同的应用程序请求刷新令牌 客户机/帐户对,一旦发布第26个令牌,第一次刷新 以前发出的令牌将变为无效。27日 请求的刷新令牌将使先前发布的第二个令牌无效 代币等等


  • 不知道?我能提供更多的信息来帮助缩小这个问题吗?这与其说是YouTube API问题,不如说是一般的Google OAuth 2基础设施问题。我会重新录制,也许你会得到更多的关注。另外,你可以试着问一下“不知道这是否有帮助”,但谷歌开发者关系部的一位成员似乎回答了你在这篇文章中的最后一个问题(re:refresh tokens),他说没有记录的上限是25。这是可能的。我最初是这样做的,不会保留最新的令牌,如果令牌有限制,可能会尝试使用足够旧的令牌。我已经编辑了我的代码,但仍然看到问题。。。但我会仔细检查,确保它按预期工作。谢谢