2016-10-24 34 views
2

我使用[Net::Google::Drive::Simple][1]从Web获取文档并将其放置在我的Google云端硬盘上。该脚本工作正常,直到我最近开始得到以下错误:Token refresh failed at /usr/local/share/perl/5.20.2/OAuth/Cmdline.pm line 76通过“Net :: Google :: Drive :: Simple”获取“400 Bad Request”和“invalid_grant”消息

打印出从谷歌的响应报头显示如下:

HTTP/1.1 400 Bad Request 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Connection: close 
Date: Mon, 24 Oct 2016 08:32:13 GMT 
Pragma: no-cache 
Accept-Ranges: none 
Server: GSE 
Vary: Accept-Encoding 
Content-Type: application/json; charset=utf-8 
Expires: Mon, 01 Jan 1990 00:00:00 GMT 
Alt-Svc: quic=":443"; ma=2592000; v="36,35,34" 
Client-Date: Mon, 24 Oct 2016 08:32:13 GMT 
Client-Peer: 2607:f8b0:4006:80e::200d:443 
Client-Response-Num: 1 
Client-SSL-Cert-Issuer: /C=US/O=Google Inc/CN=Google Internet Authority G2 
Client-SSL-Cert-Subject: /C=US/ST=California/L=Mountain View/O=Google Inc/CN=accounts.google.com 
Client-SSL-Cipher: ECDHE-RSA-AES128-SHA 
Client-SSL-Socket-Class: IO::Socket::SSL 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 

{ 
    "error" : "invalid_grant" 
} 

回答

2

首先要检查:

你的服务器的时钟是不符合NTP同步。 (解决方法:检查服务器的时间,如果它不正确修复它。)

第二件事来检查:

你刷新令牌是无效的,你需要一个新的。再次验证您的代码。

刷新令牌不再起作用的可能原因。

  1. 用户在其Google帐户中将其吊销。
  2. 刷新令牌在六个月内未用于获取新的访问令牌。
  3. 已达到用户的刷新令牌的最大数量:如果用户对您的应用程序进行身份验证,则会获得与验证其身份的用户关联的刷新令牌。如果用户再次运行它并获得第二个刷新令牌。对于每个用户,您最多可以拥有25个优秀的刷新令牌,此时第一个给定的令牌将过期并且不再有效。这就是为什么总是为用户保存最新刷新令牌的原因。
+0

我没有检查时钟。它是现货。 当你说“再次验证你的代码”时,你究竟是什么意思? – StevieD

+2

Oauth2,弹出窗口要求访问。你正在使用刷新标记,你从哪里得到它?您的脚本需要写入您的Google云端硬盘帐户的权限。 – DaImTo

+0

这是一个执行从我的服务器上的.yml文件中检索秘密的工作的perl脚本。当我查看我的Google控制台时,我可以看到Google Drive API的凭据,并且所有内容都与我的.yml文件中的内容相匹配。 – StevieD

相关问题