Я пытаюсь использовать 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. у меня:
Я ничего не пропустил? Есть ли что-нибудь еще, что мне нужно сделать?
Спасибо..