Я пытаюсь приобрести токен доступа 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, различные форумы. Сообщение об ошибке не очень полезно (возможно, спроектировано таким образом, поскольку это конечная точка безопасности).
Какие еще возможные причины для этой ошибки существуют? Что я могу сделать, чтобы получить токен доступа к учетной записи службы?
У меня такая же проблема. Вы когда-нибудь это понимали? – Josh