2016-10-24 8 views
2

[Net::Google::Drive::Simple][1]を使用してウェブからドキュメントを取得し、Googleドライブに配置します。私は最近、次のエラーが発生するまで、スクリプトは正常に動作していました:Token refresh failed at /usr/local/share/perl/5.20.2/OAuth/Cmdline.pm line 76。 Googleからの応答からヘッダを出し「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. リフレッシュトークンは、6か月で新しいアクセストークンを取得するために使用されていません。
  3. ユーザーのリフレッシュトークンの最大数:ユーザーがアプリケーションを認証する場合、ユーザーがアプリケーションを認証したユーザーに関連付けられた更新トークンが取得されます。ユーザーがもう一度それを実行し、2番目のリフレッシュトークンを取得した場合。各ユーザーに最大25個の未処理のリフレッシュトークンを持たせることができます。最初のトークンが期限切れになり、もう機能しなくなります。このため、常に最新のリフレッシュトークンをユーザーに保存することが重要です。
+0

私は時計を確認しました。それは上のスポットです。 「あなたのコードをもう一度認証する」と言うと、正確にはどういう意味ですか? – StevieD

+2

Oauth2、ウィンドウをポップアップしてアクセスを求めます。あなたはリフレッシュトークンを使っていますが、どこで取得しましたか?スクリプトにGoogleドライブアカウントへの書き込み権限が必要でした。 – DaImTo

+0

これは私のサーバ上の.ymlファイルからシークレットを取得する作業を行うperlスクリプトです。 Googleコンソールを見ると、GoogleドライブAPIの資格情報が表示され、すべてが.ymlファイルの内容と一致します。 – StevieD

関連する問題