Google oAuth2访问令牌:" invalid_grant"

时间:2015-12-01 18:42:00

标签: node.js oauth oauth-2.0 google-api access-token

this类似的问题,但这些答案已过时,不适用于我目前的情况。

这是我的网络应用程序的注册流程:

  • 使用Google登录(强制提示,提供离线审批)
  • 我使用访问令牌和刷新令牌成功获取了个人资料
  • 我做了一些点点滴滴,然后使用刷新令牌生成访问令牌并下载用户的联系人列表

这个工作正常(最近一周前进行了测试),但今天它突然给了我:

 error: invalid_grant

我使用了Node的xoauth2软件包,自6月以来这个版本还没有更新,所以我不明白为什么现在突然出现这个问题 - 除非谷歌在过去一周左右改变了一些东西?

我使用的代码示例调用错误:

  // User credentials - all verified working + correct
  xoauth2gen = xoauth2.createXOAuth2Generator({
      user: email,
      clientId: configAuth.googleAuth.clientID,
      clientSecret: configAuth.googleAuth.clientSecret,
      refreshToken: refresh
  });

  // SMTP/IMAP
  xoauth2gen.getToken(function(err, token){
      if(err){
          return console.log("XOAUTH2 Error: " + err);
      }
      if(type === "full"){
        cb(token);
      }
  });

编辑:为了完整起见,我在生成刷新令牌时使用的范围是:

app.get('/auth/google', 
  passport.authenticate('google', 
  { 
  scope : ['https://mail.google.com/', 
           'profile', 
           'email',
           'https://www.googleapis.com/auth/userinfo.profile', 
           'https://www.google.com/m8/feeds'],
          accessType: 'offline', 
          approvalPrompt: 'force' 
  }
));

3 个答案:

答案 0 :(得分:2)

根据RFC 6749,在以下情况下返回invalid_grant:

  

提供的授权许可(例如,授权代码,资源   所有者凭据)或刷新令牌无效,已过期,已撤销,确实如此   与授权请求中使用的重定向URI不匹配,或   发给了另一位客户。

查看here

答案 1 :(得分:1)

最终通过在我的Gmail帐户中取消授权我的应用程序,删除我存储在MongoDB中并从头开始的刷新令牌来解决这个问题。看来这只是我改变了一些权限的情况,而这些权限并未通过oAuth2授予​​。

答案 2 :(得分:0)

如果您使用本地主机运行测试服务器,则如果系统时间(操作系统时间)不同步,则可能会发生此错误。

我的系统时钟不正确,因为CMOS电池没电了。每次重新启动笔记本电脑时,时间都不正确。因此,我在运行时会收到此错误

`node server.js'

然后从前端向我的快速js后端发出请求