2016-10-24 54 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

相關問題