2015-07-24 7 views
2

Я пытаюсь приобрести токен доступа oauth2 с двумя ногами для хранилища google Google через учетную запись службы.Ошибка доступа к токену GoogleCredential OAuth Ошибка

Соответствующая документация содержится здесь: https://developers.google.com/identity/protocols/OAuth2ServiceAccount

я впервые попробовал пытался получить маркер через HTTP/REST API. В конце концов я отказался быть не смог пройти 400 ответа со следующими данными:

{ «ошибка»: «invalid_grant»}

Затем я обратился к рекомендованному методу: с помощью Java Google api клиентская библиотека (я использую scala).

val credentialBuilder = new GoogleCredential.Builder() 
    .setTransport(GoogleNetHttpTransport.newTrustedTransport()) 
    .setJsonFactory(JacksonFactory.getDefaultInstance()) 
    .setServiceAccountId(Configuration.GoogleAPI.ServiceAccount.email) 
    .setServiceAccountPrivateKeyFromP12File(new File(Configuration.GoogleAPI.ServiceAccount.pkcs12)) 
    .setServiceAccountScopes(Collections.singleton(StorageScopes.DEVSTORAGE_FULL_CONTROL)) 

def updateToken = { 
    val credential = credentialBuilder.build() 
    credential.refreshToken() 
    // ... do stuff here with token 
} 

Запуск выше, я получаю TokenResponseException, с полезной нагрузкой, идентичную ошибку я получал прямой доступ к REST API. 400 Bad Request, ошибка invalid_grant.

Выполнение некоторых исследований (как на StackOverflow и в других местах), я считаю, что наиболее распространенные причины этого сообщения об ошибке являются:

1) Местные часы не синхронизированы с серверами Google. Я подозревал это даже назад, когда использовал REST api, потому что раньше я сталкивался с этой проблемой для других сервисов. Я довольно уверен, что его не проблема часы, однако, потому что я неоднократно синхронизируются свои часы с внешним NTP-сервер:

Судо Ntpdate -s ntp.ubuntu.com

2) Другой Общей причиной этой ошибки является неверный идентификатор клиента учетной записи службы. Большинство людей устанавливают его на свой идентификатор клиента учетной записи службы (заканчивая на «apps.googleusercontent.com») вместо электронной почты клиента учетной записи службы. Его довольно ясно, что это не проблема, так как я правильно указываю на электронную почту (документы проинструктировали это, поэтому я следил за указаниями), заканчивая «@ developer.gserviceaccount.com».

Я застрял. Я проверил документацию пользователя, javadocs, различные форумы. Сообщение об ошибке не очень полезно (возможно, спроектировано таким образом, поскольку это конечная точка безопасности).

Какие еще возможные причины для этой ошибки существуют? Что я могу сделать, чтобы получить токен доступа к учетной записи службы?

+0

У меня такая же проблема. Вы когда-нибудь это понимали? – Josh

ответ

0

Если вы используете OAuth2.0 для доступа к учетной записи Google Analytics, может возникнуть еще одна причина получения invalid_grant. Согласно developer docs:

Если приложение пытается использовать УТРАТИТ маркер обновления, то возвращается ответ invalid_grant ошибки. Предел для каждой уникальной пары клиентов OAuth 2.0 и учетной записи Google Analytics составляет 25 обновленных токенов (обратите внимание, что этот лимит может быть изменен). Если приложение продолжает запрашивать токены обновления для одной и той же пары Client/Account, после выдачи 26-го маркера, первый токен обновления, который был ранее выпущен , станет недействительным. Запрошенный 27-й обновленный токен сделает недействительным второй ранее выпущенный токен и так далее.

+0

Это не проблема. Я не пользуюсь службой аналитики (хотя это возможно и для других апитов). Я даже не успел приобрести токен доступа один раз, не забывая обновлять существующий токен. Никто не использует эту учетную запись службы. Если бы это было проблемой, я мог бы получить токен после ожидания часа, пока старый токен не истечет. Я не смог получить токен даже после того, как не пытался его приобрести больше часа. – iiaka

Смежные вопросы