使用刷新令牌异常{"错误" :" invalid_grant" }'

时间:2014-11-03 21:58:26

标签: token gmail-api

我已经成功构建了一个获取访问权限并刷新令牌的应用程序。

在我的脚本中,我检查访问令牌是否有效,如果不是,则我使用刷新令牌获取访问权限$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" }''

7 个答案:

答案 0 :(得分:11)

在OAuth2规范中,&#34; invalid_grant&#34;对于与无效/过期/撤销令牌(auth grant或刷新令牌)相关的所有错误,它都是一种全能。

  1. 服务器时钟/时间不同步
  2. 未授权离线访问
  3. 受Google限制
  4. 使用过期的刷新令牌
  5. 用户已停用6个月
  6. 使用服务工作者电子邮件而不是客户端ID
  7. 在短时间内访问令牌太多
  8. 客户端SDK可能已过时
  9. 不正确/不完整的刷新令牌
  10. 用户已主动撤销对我们应用的访问
  11. 用户已重置/恢复其Google密码
  12. I've written a short article总结了每个项目的一些调试指导,以帮助找到罪魁祸首。我们花了几天的时间来寻找它,希望它可以帮助其他人把这些日子变成几个小时。

答案 1 :(得分:4)

&#34;无效授权的原因&#34;错误可能是由于刷新令牌不起作用。这可能是因为当刷新令牌的数量超过限制时,旧令牌变为无效。如果应用程序尝试使用无效的刷新令牌,则会返回invalid_grant错误响应。这是link以获取更多文档。

答案 2 :(得分:0)

“invalid_grent”可能是由于过期/无效的刷新令牌造成的。在我的情况下,它最后有一个额外的空间。

答案 3 :(得分:0)

据我所知,每个人都告诉你,错误可能是由两个原因造成的:

  1. 刷新令牌不再有效
  2. 刷新令牌错误 - 可能隐藏了某些字符代码以某种方式添加。
  3. 我之前遇到过这个问题(相同的错误信息),结果我的刷新令牌已过期。

答案 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 错误。

相关问题