Аутентификация Google API с помощью сервисного аккаунта с Java API

Я пытаюсь использовать API oauth для аутентификации учетной записи службы Google через API Java. Я надеюсь использовать его для доступа к Google Bigquery. Я получаю «недействительный грант», возвращаемый из моих запросов API.

Вот код, который является копией простого примера аутентификации (, который был не для Bigquery..., а для другого Google API):

  /** Global instance of the HTTP transport. */
  private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  /** Global instance of the JSON factory. */
  private static final JsonFactory JSON_FACTORY = new JacksonFactory();

  private static Bigquery bigquery;  

public ServiceAccountExample() {

      try {
          try {

            GoogleCredential credential = new  GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
               .setJsonFactory(JSON_FACTORY)
               .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
               .setServiceAccountScopes(BigqueryScopes.BIGQUERY)
               .setServiceAccountPrivateKeyFromP12File(new File("GoogleBigQuery-privatekey.p12"))
                //.setRefreshListeners(refreshListeners)
                //.setServiceAccountUser("email.com")
               .build();


            credential.refreshToken();

            bigquery = new Bigquery.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                        //.setApplicationName("GoogleBigQuery/1.0")
                       .build();

            listDatasets(bigquery, "publicdata");

            return;
          } catch (IOException e) {
            System.err.println(e.getMessage());
          }
        } catch (Throwable t) {
          t.printStackTrace();
        }

}

СЛУЖБА _АККАУНТ _EMAIL — адрес электронной почты вида :XXXXXXX@developer.gserviceaccount.com

Если я удалю строку credential.refreshToken (), произойдет сбой в listsDatasets при первом вызове Bigquery... В противном случае произойдет сбой на credential.refreshToken ()... с той же ошибкой.

BigQuery не принимает аутентификацию сервисного аккаунта?

Я считаю, что сделал все правильно через консоль API. у меня:

  • Включен доступ к Big Query API.
  • Создал учетную запись службы на вкладке «Доступ к API».
  • Скачал мой закрытый ключ (, на который есть ссылка в приведенном выше коде ).
  • Учитывая, что пользователь моей учетной записи службы «может редактировать» доступ на вкладке «Команды».
  • Включен биллинг.

Я ничего не пропустил? Есть ли что-нибудь еще, что мне нужно сделать?

Спасибо..

5
задан Kara 29 December 2013 в 20:52
поделиться