gpt4 book ai didi

php - 分析 API 返回 : Bad request - invalid_grant

转载 作者:可可西里 更新时间:2023-11-01 00:13:46 26 4
gpt4 key购买 nike

我使用的是 Google Analytics API v3。我现在将解释我的申请流程

我在这里使用了这个文档:https://developers.google.com/accounts/docs/OAuth2WebServer

首先,为用户生成一个 OAUTH-URL。网址看起来像这样

https://accounts.google.com/o/oauth2/auth?
client_id={CLIENT-ID}&
redirect_uri={REDIRECT-URL}&
state={CUSTOM-NUMBER}&
response_type=code&
access_type=offline&
approval_prompt=force&
scope=https://www.googleapis.com/auth/analytics

当用户点击链接时,他进行身份验证。之后,通过代码,我获得了访问和刷新 token 。

我正在使用参数向 https://www.googleapis.com/oauth2/v3/token 发送请求

code = Code from Analytics
grant_type = authorization_code
client_secret = CLIENT_SECRET
client_id = CLIENT_ID
redirect_uri = REDIRECT_URI

我发送的 cURL 选项如下:

CURLOPT_HTTPHEADER = array('Content-Type: application/x-www-form-urlencoded')

当然,发布数据是使用 http_build_query 构建的,因此我可以使用该内容类型 header 。

然后,我将使用此 URL 获取用户的所有配置文件

https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles

这行得通,我列出了所有配置文件。然后用户选择其中一个配置文件,我的图书馆获取用户的当前数据(综合浏览量、访问量等)

我现在遇到的问题是,当我想每天使用 cron 刷新数据时,我收到错误消息:

'error' => 'invalid_grant',
'error_description' => 'Bad Request'

但我不知道,为什么?

我将配置文件的访问 token 和刷新 token 保存在我的数据库中。然后,在我发出访问数据请求之前重新访问数据时,我检查 token 是否有效。但即使这样也失败了。

我在这里做这个请求

https://accounts.google.com/o/oauth2/tokeninfo?access_token=ya29.BwHqH8NOPVhafk3SnwbqjLZMXub4Q8bemC-8vKVwp-UjRqaIHRXrzEV3WjInhGzl1-phIn7XI4NnDA

它告诉我,访问 token 无效(这很神秘,因为我刚刚通过身份验证,5 秒后 token 不再有效?

无论如何,然后我尝试用这个请求刷新它

URL: https://www.googleapis.com/oauth2/v3/token
Parameters:

client_secret = CLIENT_SECRET
client_id = CLIENT_ID
refresh_token = REFRESH_TOKEN From my database
grant_type = refresh_token

cURL Options: CURLOPT_HTTPHEADER = array('Content-Type: application/x-www-form-urlencoded')

然后,一个使用 http_build_query 构建的参数的 post 请求

响应看起来像这样

string(67) "{ "error": "invalid_grant", "error_description": "Bad Request" } "

但我不知道为什么。我正在使用 5 分钟前获得的访问 token 和刷新 token ,以及对第一个请求有效的 token 。为什么它在 5 分钟后使用相同的 token 不起作用?为什么我什至不能刷新 token ?

最佳答案

无效授权通常有两个可能的原因。

  1. 您的服务器时钟与 NTP 不同步。 (解决办法:检查服务器时间,如果不正确就修复。)
  2. 已超出刷新 token 限制。 (解决方案:您无能为力,他们不能使用更多刷新 token )应用程序可以请求多个刷新 token 。例如,这在用户想要在多台机器上安装应用程序的情况下很有用。在这种情况下,需要两个刷新 token ,每个安装一个。当刷新 token 的数量超过限制时,旧 token 将失效。如果应用程序尝试使用无效的刷新 token ,则会返回一个 invalid_grant 错误响应。每对唯一的 OAuth 2.0 客户端的限制是 25 个刷新 token (请注意,此限制可能会更改)。如果应用程序继续为同一个 Client/Account 请求刷新 token ,一旦发出第 26 次 token ,之前发出的第 1 次刷新 token 将失效。第 27 个请求的刷新 token 将使之前发出的第 2 个 token 失效,依此类推。

您应该只存储刷新 token 。访问 token 将在一小时后过期。这是不同电话的演练 Google 3 legged Oauth2 flow .

我无法从你的代码中找出任何东西,它看起来有点困惑。但我看不到任何看起来确实不对劲的东西,这就是为什么我猜测它可能是前两个问题之一。

关于php - 分析 API 返回 : Bad request - invalid_grant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28148265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com