我已经成功构建了一个获取访问权限并刷新令牌的应用程序。
在我的脚本中,我检查访问令牌是否有效,如果不是,则我使用刷新令牌获取访问权限$client->refreshToken($refreshToken);
代码完整,
$refreshToken = '<REFRESH_TOKEN>';
$client_id = '<CLIENT_ID>';
$client_secret = '<CLIENT_SECRET>';
// Setup infomation
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setAccessType("offline");
$client->addScope("https://mail.google.com/");
// If access token is not valid use refresh token
if($client->isAccessTokenExpired()) {
// Use refresh token
$client->refreshToken($refreshToken);
} else {
// Use access token
echo $client->setAccessToken($accessToken);
}
然而,当尝试使用刷新令牌时,我得到了一个激发:
Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }''
答案 0 :(得分:11)
在OAuth2规范中,&#34; invalid_grant&#34;对于与无效/过期/撤销令牌(auth grant或刷新令牌)相关的所有错误,它都是一种全能。
I've written a short article总结了每个项目的一些调试指导,以帮助找到罪魁祸首。我们花了几天的时间来寻找它,希望它可以帮助其他人把这些日子变成几个小时。
答案 1 :(得分:4)
&#34;无效授权的原因&#34;错误可能是由于刷新令牌不起作用。这可能是因为当刷新令牌的数量超过限制时,旧令牌变为无效。如果应用程序尝试使用无效的刷新令牌,则会返回invalid_grant错误响应。这是link以获取更多文档。
答案 2 :(得分:0)
“invalid_grent”可能是由于过期/无效的刷新令牌造成的。在我的情况下,它最后有一个额外的空间。
答案 3 :(得分:0)
据我所知,每个人都告诉你,错误可能是由两个原因造成的:
我之前遇到过这个问题(相同的错误信息),结果我的刷新令牌已过期。
答案 4 :(得分:0)
我的问题是authorization_code只是为了交换访问令牌,您无法重复使用它。只需更新authorization_code即可获取新的访问令牌
答案 5 :(得分:0)
谷歌现在在他们的API指南中有一个dedicated page来说明这个错误,其中只有两个原因...
每个唯一的OAuth 2.0客户端和Google Analytics帐户对的限制为25个刷新令牌。如果应用程序继续请求同一客户端/帐户对的刷新令牌,则一旦发出第26个令牌,先前发出的第一个刷新令牌将变为无效。
答案 6 :(得分:0)
要在列表中再添加一项尚未提及的项目:
从原始请求收到的刷新令牌可能是 URL 编码的(例如,“1//...”将是“1%2F%2F...”)。
确保您使用解码版本。否则,您最终可能会收到发送到服务器的双重编码刷新令牌,从而导致 invalid_grant 错误。