【问题标题】:YouTube API refresh token revoked with 400 code "invalid_grant" (for seemingly no reason)YouTube API 刷新令牌被 400 代码“invalid_grant”撤销(似乎没有理由)
【发布时间】:2012-09-28 21:16:09
【问题描述】:

这是我在 stackoverflow 上的第一篇文章。就这样吧。

我构建了一个服务器端 PHP 应用程序,其中涉及读取/更改一个用户的 YouTube 帐户(更改字幕文件)。用户已通过 OAuth 2 进行身份验证。我一直在存储 refresh_token 并在 access_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 每个应用程序是否有最大数量的“活动”刷新令牌?或者类似的东西?

谢谢!

【问题讨论】:

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

标签: oauth-2.0 youtube-api


【解决方案1】:

请查看google developers pages

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 2021-09-24
    • 1970-01-01
    • 2019-04-12
    • 2013-12-04
    • 2018-04-23
    • 2021-07-03
    • 2015-12-13
    相关资源
    最近更新 更多