Google Oauth2:刷新 OAuth2 令牌时出错,消息:'{ "error" : "invalid_grant" }'
Google Oauth2: Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }'
我的本地主机上有以下代码 运行 以尝试使用 Google Oauth2 进行身份验证。验证后,它似乎可以工作一段时间。然后在一定时间后我得到这个经典错误:
Error refreshing the OAuth2 token, message: '{
"error" : "invalid_grant"
}'
我看过之前发布到 Whosebug 的这个问题,但建议的解决方案似乎对我不起作用。
我相信访问令牌已正确更新(请参阅下面的代码)。我也相信服务器时钟已正确同步。我做错了什么?
//$token retrieved from database
$token = {"access_token":"xxx.xxx_xxxx-xxx","token_type":"Bearer","expires_in":3600,"refresh_token":"1\/xXxXxxxxxXXXxx","created":145490000}
$google = new Google_Client();
$google->setAccessType('offline');
$google->setClientId($client_id);
$google->setClientSecret($client_secret);
$google->setRedirectUri($client_redirect_uri);
$google->setAccessToken($token);
if($google->isAccessTokenExpired()) {
$google->refreshToken($token);
}
$token = $google->getAccessToken();
$google->setAccessToken($token);
//Some Database code to save the new $token
...
$result = new \Google_Service_YouTube($google);
Invalid_Grant
有两个可能的原因
- 服务器时钟与 NTP 不同步。 (解决时间固定)
- 刷新令牌已过期。 (解决方案再次请求身份验证)
您说您的代码可以工作一段时间然后停止工作。这让我觉得你的问题是 nr 2.
刷新令牌停止工作的原因:
- 相关用户已撤销您的身份验证。
- 如果刷新令牌 6 个月未使用,将自动过期。
- 刷新令牌基于项目(客户端 ID)和用户。如果用户对您的应用程序进行身份验证,您将获得一个刷新令牌。如果他们再次这样做,您将获得另一个刷新令牌。第一个仍然会像第二个一样工作。一旦用户第 27 次验证您的代码,您最多可以拥有 26 个实时刷新令牌,您将失去第一个刷新令牌。
要解决您的问题,您需要尝试找出以上 3 个问题中的哪一个导致您的刷新令牌过期。我真的帮不了你太多,它需要你做一些侦探工作。
我的本地主机上有以下代码 运行 以尝试使用 Google Oauth2 进行身份验证。验证后,它似乎可以工作一段时间。然后在一定时间后我得到这个经典错误:
Error refreshing the OAuth2 token, message: '{
"error" : "invalid_grant"
}'
我看过之前发布到 Whosebug 的这个问题,但建议的解决方案似乎对我不起作用。
我相信访问令牌已正确更新(请参阅下面的代码)。我也相信服务器时钟已正确同步。我做错了什么?
//$token retrieved from database
$token = {"access_token":"xxx.xxx_xxxx-xxx","token_type":"Bearer","expires_in":3600,"refresh_token":"1\/xXxXxxxxxXXXxx","created":145490000}
$google = new Google_Client();
$google->setAccessType('offline');
$google->setClientId($client_id);
$google->setClientSecret($client_secret);
$google->setRedirectUri($client_redirect_uri);
$google->setAccessToken($token);
if($google->isAccessTokenExpired()) {
$google->refreshToken($token);
}
$token = $google->getAccessToken();
$google->setAccessToken($token);
//Some Database code to save the new $token
...
$result = new \Google_Service_YouTube($google);
Invalid_Grant
有两个可能的原因- 服务器时钟与 NTP 不同步。 (解决时间固定)
- 刷新令牌已过期。 (解决方案再次请求身份验证)
您说您的代码可以工作一段时间然后停止工作。这让我觉得你的问题是 nr 2.
刷新令牌停止工作的原因:
- 相关用户已撤销您的身份验证。
- 如果刷新令牌 6 个月未使用,将自动过期。
- 刷新令牌基于项目(客户端 ID)和用户。如果用户对您的应用程序进行身份验证,您将获得一个刷新令牌。如果他们再次这样做,您将获得另一个刷新令牌。第一个仍然会像第二个一样工作。一旦用户第 27 次验证您的代码,您最多可以拥有 26 个实时刷新令牌,您将失去第一个刷新令牌。
要解决您的问题,您需要尝试找出以上 3 个问题中的哪一个导致您的刷新令牌过期。我真的帮不了你太多,它需要你做一些侦探工作。