Jas*_*per 3 youtube-api oauth-2.0
这是我在 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"
}
Run Code Online (Sandbox Code Playgroud)
如果你想查看源代码,它在 github 上。这是发生刷新的相关行号:https : //github.com/wellcaffeinated/yt-subtitle-explorer/blob/master/app/YTSE/OAuth/LoginManager.php#L330
(您会注意到我已经添加了针对此错误的检查并要求管理员重新授权应用程序……但这远非理想)
我调查过的其他帖子告诉人们使用approval_prompt=force...所以我正在这样做。
编辑: 我最新的怀疑是,由于每次管理员登录时我都请求离线访问 (approval_prompt=force),我不断生成新的 refresh_tokens(除非没有其他可用的,否则我不会记录)。google 的 OAuth 是否有每个应用程序的最大“活动”refresh_tokens 数?或类似的东西?
谢谢!
请从谷歌开发者页面查看:
如果您在尝试使用刷新令牌时收到 invalid_grant 错误响应,则错误原因可能是以下原因:
您服务器的时钟与 NTP 不同步。
已超出刷新令牌限制。应用程序可以请求多个刷新令牌来访问单个 Google Analytics 帐户。例如,这在用户想要在多台机器上安装应用程序并访问同一个 Google Analytics 帐户的情况下很有用。在这种情况下,需要两个刷新令牌,每个安装一个。当刷新令牌的数量超过限制时,旧令牌将失效。如果应用程序尝试使用无效的刷新令牌,则会返回 invalid_grant 错误响应。每对唯一的 OAuth 2.0 客户端和 Google Analytics 帐户的限制为 25 个刷新令牌(请注意,此限制可能会发生变化)。如果应用程序继续为同一个 Client/Account 对请求刷新令牌,一旦发出第 26 个令牌,之前发布的第一个刷新令牌将失效。第 27 个请求的刷新令牌将使先前颁发的第 2 个令牌无效,依此类推。
| 归档时间: |
|
| 查看次数: |
3873 次 |
| 最近记录: |