Как получить токен обновления для работы командной строки gsutil?

Я использую gsutil для передачи файлов с компьютера с Windows в Google Cloud Storage.

Я не использовал его более 6 месяцев, и теперь, когда я пробую его, я получаю:

Ошибка: invalid_grant

Изучив это, я подозреваю, что токен доступа больше не действителен, поскольку он не использовался в течение 6 месяцев, и мне нужен токен обновления?

Я не могу найти, как получить и использовать это.

спасибо

Выполнение gsutil -DD config приводит к следующему результату:

C:\Python27>python c:/gsutil/gsutil -DD config 

DEBUG:boto:path=/pub/gsutil.tar.gz
DEBUG:boto:auth_path=/pub/gsutil.tar.gz
DEBUG:boto:Method: HEAD
DEBUG:boto:Path: /pub/gsutil.tar.gz
DEBUG:boto:Data:
DEBUG:boto:Headers: {}
DEBUG:boto:Host: storage.googleapis.com
DEBUG:boto:Params: {}
DEBUG:boto:establishing HTTPS connection: host=storage.googleapis.com, kwargs={'timeout': 70}
DEBUG:boto:Token: None
DEBUG:oauth2_client:GetAccessToken: checking cache for key *******************************
DEBUG:oauth2_client:FileSystemTokenCache.GetToken: key=******************************* not present (cache_file= c:\users\admini~1\appdata\local\temp\2\oauth2_client-tokencache._.ea******************************)
DEBUG:oauth2_client:GetAccessToken: token from cache: None
DEBUG:oauth2_client:GetAccessToken: fetching fresh access token...
INFO:oauth2client.client:Refreshing access_token connect: (accounts.google.com, 443) 
send: 'POST /o/oauth2/token HTTP/1.1\r\nHost: accounts.google.com\r\nContent-Length: 177\r\ncontent-type: application/x- www-form-urlencoded\r\naccept-encoding: gzip, deflate\r\nuser-agent: Python-httplib2/0.7.7 (gzip)\r\n\r\nclient_secret=******************&grant_type=refresh_token&refresh_token=****************************************&client_ id=****************.apps.googleusercontent.com' reply: 'HTTP/1.1 400 Bad Request\r\n' 
header: Content-Type: application/json; charset=utf-8 header: Cache-Control: no-cache, no-store, max-age=0, must-revalidate header: Pragma: no-cache header: Expires: Fri, 01 Jan 1990 00:00:00 GMT header: Date: Thu, 08 May 2014 02:02:21 GMT header: Content-Disposition: attachment; filename="json.txt"; filename*=UTF-8''json.txt header: Content-Encoding: gzip header: X-Content-Type-Options: nosniff header: X-Frame-Options: SAMEORIGIN
header: X-XSS-Protection: 1; mode=block header: Server: GSE header: Alternate-Protocol: 443:quic header: Transfer-Encoding: chunked
INFO:oauth2client.client:Failed to retrieve access token: { "error" : "invalid_grant" } 
Traceback (most recent call last):
  File "c:/gsutil/gsutil", line 83, in <module> gslib.__main__.main() File "c:\gsutil\gslib_main_.py", line 151, in main command_runner.RunNamedCommand('ver', ['-l']) 
  File "c:\gsutil\gslib\command_runner.py", line 95, in RunNamedCommand self._MaybeCheckForAndOfferSoftwareUpdate(command_name, debug)):
  File "c:\gsutil\gslib\command_runner.py", line 181, in _MaybeCheckForAndOfferSoftwareUpdate cur_ver = LookUpGsutilVersion(suri_builder.StorageUri(GSUTIL_PUB_TARBALL)) 
  File "c:\gsutil\gslib\util.py", line 299, in LookUpGsutilVersion obj = uri.get_key(False) 
  File "c:\gsutil\third_party\boto\boto\storage_uri.py", line 342, in get_key generation=self.generation) 
  File "c:\gsutil\third_party\boto\boto\gs\bucket.py", line 102, in get_key query_args_l=query_args_l) 
  File "c:\gsutil\third_party\boto\boto\s3\bucket.py", line 176, in _get_key_internal query_args=query_args) 
  File "c:\gsutil\third_party\boto\boto\s3\connection.py", line 547, in make_request retry_handler=retry_handler 
  File "c:\gsutil\third_party\boto\boto\connection.py", line 947, in make_request retry_handler=retry_handler) 
  File "c:\gsutil\third_party\boto\boto\connection.py", line 838, in _mexe request.authorize(connection=self) 
  File "c:\gsutil\third_party\boto\boto\connection.py", line 377, in authorize connection._auth_handler.add_auth(self, *********) 
  File "c:\gsutil\gslib\third_party\oauth2_plugin\oauth2_plugin.py", line 22, in add_auth self.oauth2_client.GetAuthorizationHeader() 
  File "c:\gsutil\gslib\third_party\oauth2_plugin\oauth2_client.py", line 338, in GetAuthorizationHeader return 'Bearer %s' % self.GetAccessToken().token 
  File "c:\gsutil\gslib\third_party\oauth2_plugin\oauth2_client.py", line 309, in GetAccessToken access_token = self.FetchAccessToken() 
  File "c:\gsutil\gslib\third_party\oauth2_plugin\oauth2_client.py", line 435, in FetchAccessToken credentials.refresh(http) 
  File "c:\gsutil\third_party\google-api-python-client\oauth2client\client.py", line 516, in refresh self._refresh(http.request) 
  File "c:\gsutil\third_party\google-api-python-client\oauth2client\client.py", line 653, in _refresh self._do_refresh_request(http_request) 
  File "c:\gsutil\third_party\google-api-python-client\oauth2client\client.py", line 710, in _do_refresh_request raise AccessTokenRefreshError(error_msg) oauth2client.client.AccessTokenRefreshError: invalid_grant

person user3610488    schedule 07.05.2014    source источник


Ответы (3)


Вы можете попросить gsutil настроить себя. Перейдите в каталог с gsutil и запустите это:

c:\gsutil> python gsutil config

Gsutil проведет вас через шаги по настройке ваших учетных данных.

Тем не менее, токены доступа обычно действуют около получаса. Скорее всего, ранее настроенный токен обновления по какой-то причине был отозван. С другой стороны, вы можете запрашивать новые токены только с определенной скоростью. Возможно, ваша учетная запись по какой-то причине запрашивала очень много токенов обновления и была временно ограничена по скорости службой доступа.

person Brandon Yarbrough    schedule 07.05.2014
comment
спасибо, Брэндон. Вчера я попробовал настроить и получил: C:\gsutil›python gsutil config Ошибка: invalid_grant. Я только что попробовал еще раз и, как ни странно, получил: C:\Python27>python c:/gsutil/gsutil config Ошибка: невозможно найти сервер на account.google.com. - person user3610488; 07.05.2014
comment
Странно. Это все еще происходит? Возможно, вы находитесь за брандмауэром, который не позволяет вам получить доступ к account.google.com? Можно ли просмотреть этот URL-адрес в веб-браузере на этом компьютере: accounts.google.com/ServiceLogin?hl =ru - person Brandon Yarbrough; 07.05.2014
comment
Привет, Брэндон. Да, я могу получить доступ к URL-адресу учетной записи с помощью Chrome, используя свой логин. - person user3610488; 08.05.2014
comment
используя конфигурацию C:\Python27>python c:/gsutil/gsutil - теперь я вернулся к получению invalid_grant - person user3610488; 08.05.2014
comment
Не могли бы вы попробовать еще раз, используя gsutil -DD config, и опубликовать результаты в своем вопросе? Вероятно, в нем будет несколько строк, включающих Authorization: SomeLongStringOfStuff. Не забудьте удалить эти строки перед публикацией. - person Brandon Yarbrough; 08.05.2014
comment
C:\Python27>python c:/gsutil/gsutil -DD config DEBUG:boto:path=/pub/gsutil.tar.gz DEBUG:boto:auth_path=/pub/gsutil.tar.gz DEBUG:boto:Method: HEAD DEBUG:boto:Путь: /pub/gsutil.tar.gz DEBUG:boto:Данные: DEBUG:boto:Заголовки: {} DEBUG:boto:Host: storage.googleapis.com DEBUG:boto:Params: {} DEBUG:boto :установление HTTPS-соединения: host=storage.googleapis.com, kwargs={'timeout': 70} DEBUG:boto:Token: None DEBUG:oauth2_client:GetAccessToken: проверка кэша на наличие ключа *********** ********************* ОТЛАДКА: oauth2_client: FileSystemTokenCache.GetToken: ключ = ********************** *********** - person user3610488; 08.05.2014
comment
отсутствует (cache_file= c:\users\admini~1\appdata\local\temp\2\oauth2_client-tokencache._.ea********************* **********) DEBUG:oauth2_client:GetAccessToken: токен из кеша: нет DEBUG:oauth2_client:GetAccessToken: получение нового токена доступа... INFO:oauth2client.client:Обновление access_token connect: (accounts.google.com , 443) - person user3610488; 08.05.2014
comment
send: 'POST /o/oauth2/token HTTP/1.1\r\nHost: account.google.com\r\nContent-Length: 177\r\ncontent-type: application/x- www-form-urlencoded\r\ naccept-encoding: gzip, deflate\r\nuser-agent: Python-httplib2/0.7.7 (gzip)\r\n\r\nclient_secret=***************** *&grant_type=refresh_token&refresh_token=*********************************************&client_ id=** ***************.apps.googleusercontent.com» ответ: «HTTP/1.1 400 Неверный запрос\r\n» - person user3610488; 08.05.2014
comment
заголовок: Content-Type: application/json; charset=utf-8 header: Cache-Control: no-cache, no-store, max-age=0, must-revalidate header: Pragma: no-cache header: Срок действия: пятница, 01 января 1990 г., 00:00:00 GMT заголовок: Дата: Чт, 08 мая 2014 г. 02:02:21 по Гринвичу заголовок: Content-Disposition: вложение; имя файла=json.txt; имя_файла*=UTF-8''json.txt заголовок: Content-Encoding: заголовок gzip: X-Content-Type-Options: заголовок nosniff: X-Frame-Options: SAMEORIGIN - person user3610488; 08.05.2014
comment
заголовок: X-XSS-Защита: 1; режим = заголовок блока: сервер: заголовок GSE: альтернативный протокол: 443: заголовок quic: кодировка передачи: разбивка на фрагменты INFO: oauth2client.client: не удалось получить токен доступа: { ошибка : invalid_grant } трассировка (последний последний вызов): файл c:/gsutil/gsutil, строка 83, в ‹module› gslib.__main__.main() Файл c:\gsutil\gslib_main_.py, строка 151, в main command_runner.RunNamedCommand('ver ', ['-l']) Файл c:\gsutil\gslib\command_runner.py, строка 95, в RunNamedCommand self._MaybeCheckForAndOfferSoftwareUpdate(command_name, debug)): - person user3610488; 08.05.2014
comment
Файл c:\gsutil\gslib\command_runner.py, строка 181, в _MaybeCheckForAndOfferSoftwareUpdate cur_ver = LookUpGsutilVersion(suri_builder.StorageUri(GSUTIL_PUB_TARBALL)) Файл c:\gsutil\gslib\util.py, строка 299, в LookUpGsutilVersion obj = uri.get_key (Неверно) Файл c:\gsutil\ Third_Party\boto\boto\storage_uri.py, строка 342, в get_key generate=self.generation) Файл c:\gsutil\ Third_party\boto\boto\gs\bucket.py, строка 102 , в get_key query_args_l=query_args_l) Файл c:\gsutil\ Third_Party\boto\boto\s3\bucket.py, строка 176, в _get_key_internal - person user3610488; 08.05.2014
comment
uery_args=query_args) Файл c:\gsutil\ Third_Party\boto\boto\s3\connection.py, строка 547, в make_request retry_handler=retry_handler Файл c:\gsutil\ Third_party\boto\boto\connection.py, строка 947, в make_request retry_handler=retry_handler) Файл c:\gsutil\ Third_Party\boto\boto\connection.py, строка 838, в _mexe request.authorize(connection=self) Файл c:\gsutil\ Third_party\boto\boto\connection.py, строка 377, в авторизации - person user3610488; 08.05.2014
comment
connection._auth_handler.add_auth(self, *********) Файл c:\gsutil\gslib\ Third_Party\oauth2_plugin\oauth2_plugin.py, строка 22, в add_auth self.oauth2_client.GetAuthorizationHeader() Файл c:\ gsutil\gslib\ Third_Party\oauth2_plugin\oauth2_client.py, строка 338, в GetAuthorizationHeader return 'Bearer %s' % self.GetAccessToken().token File c:\gsutil\gslib\ Third_Party\oauth2_plugin\oauth2_client.py, строка 309, в GetAccessToken access_token = self.FetchAccessToken() - person user3610488; 08.05.2014
comment
Файл c:\gsutil\gslib\ Third_Party\oauth2_plugin\oauth2_client.py, строка 435, в FetchAccessToken учетных данных.refresh(http) 516, в файле Refresh self._refresh(http.request) c:\gsutil\ Third_Party\google-api-python-client\oauth2client\client.py, строка 653, в файле _refresh self._do_refresh_request(http_request) c:\gsutil \ Third_Party\google-api-python-client\oauth2client\client.py, строка 710, в _do_refresh_request - person user3610488; 08.05.2014
comment
поднять AccessTokenRefreshError (error_msg) oauth2client.client.AccessTokenRefreshError: invalid_grant - person user3610488; 08.05.2014
comment
Хорошо, вот предложение. Я думаю, что токен обновления в вашем файле .boto по какой-то причине неверен (предположительно, отозван). Я подозреваю, что если вы удалите файл .boto, а затем запустите config, это должно решить вашу проблему. Если нет, я подозреваю, что вы используете очень старую версию gsutil. Возможно, вы захотите обновиться до более новой версии. За последний год было исправлено множество ошибок, одна из которых может решить вашу проблему. - person Brandon Yarbrough; 08.05.2014
comment
Потрясающий! Я нашел и удалил (вернее переименовал) файл .boto. Когда я снова запустил config, он работал нормально и создал новый файл .boto. Теперь запуск gsutil для передачи файлов вернулся в нормальное состояние. Я также обновил его до последней версии gsutil. Спасибо Брэндон за всю вашу помощь с этим. - person user3610488; 09.05.2014

Теперь команда для аутентификации

$ gcloud auth login

Это должно обновить ваш грант и заставить вас снова работать.

Вы также можете запустить

$ gcloud components update

для обновления вашей установки.

person Tad    schedule 03.01.2017

Брэндон Ярбро дал мне предложения, которые решили эту проблему. Он заподозрил, что файл .boto поврежден, и предложил мне удалить его и снова запустить gsutil config. Я сделал это, и это решило проблему.

person user3610488    schedule 08.05.2014
comment
К вашему сведению: текущая версия gsutil не подвержена этой проблеме. - person Brandon Yarbrough; 09.05.2014