使用400代码“invalid_grant”撤消了YouTube API刷新令牌(似乎没有理由)

时间:2012-10-08 15:30:38

标签: oauth-2.0 youtube-api

这是我在stackoverflow上的第一篇文章。在这里。

我构建了一个服务器端PHP应用程序,涉及读取/更改一个用户的YouTube帐户(更改为字幕文件)。用户通过OAuth 2进行身份验证。当access_token到期时,我一直存储refresh_token并成功刷新

但是现在,我似乎得到了一个错误,这恰好与两件事有关:

  • 用户上传新视频
  • 周日晚上

我不知道这是否意味着什么。

尝试刷新访问令牌时发生错误,我使用与之前相同的方式刷新令牌。以下是详细信息:

错误讯息:

[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。以下是进行刷新的相关行号:https://github.com/wellcaffeinated/yt-subtitle-explorer/blob/master/app/YTSE/OAuth/LoginManager.php#L330

(您会注意到我已添加了对此错误的检查,并要求管理员重新授权该应用程序......但这远非理想情况)

我调查的其他帖子告诉人们使用approval_prompt = force ...所以我这样做。

修改 我最新的怀疑是,由于每次管理员登录时我都要求离线访问(approval_prompt = force),我会继续生成新的refresh_tokens(我不会记录,除非没有其他可用的)。谷歌的OAuth每个应用程序都有最大数量的“活动”refresh_tokens吗?或类似的东西?

谢谢!

1 个答案:

答案 0 :(得分:4)

请从google developers pages检查:

  

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

     
      
  1. 您的服务器时钟与NTP不同步。

  2.   
  3. 刷新令牌限制   已超出。应用程序可以请求多个刷新令牌   访问单个Google Analytics帐户。例如,这很有用   在用户想要在多个应用程序上安装应用程序的情况下   计算机并访问相同的Google Analytics帐户。在这种情况下,   需要两个刷新令牌,每个安装一个。当。。。的时候   刷新令牌的数量超过限制,旧令牌变为   无效。如果应用程序尝试使用无效的刷新   令牌,返回invalid_grant错误响应。每个的限制   唯一一对OAuth 2.0客户端和Google Analytics帐户是25   刷新令牌(请注意,此限制可能会发生变化)。如果   应用程序继续请求相同的刷新令牌   客户/帐户对,一旦发出第26个令牌,第一次刷新   先前发出的令牌将变为无效。 27日   请求的刷新令牌将使先前发出的第二个无效   令牌等等。

  4.