Autenticando a API do Google com uma conta de serviço com a API Java

Estou tentando usar a API oauth para autenticar uma conta de serviço do Google por meio da API Java. Espero usá-lo para acessar o Google Bigquery. Recebo uma "concessão inválida" retornada das minhas solicitações de API.

Aqui está o código, que é uma cópia de um exemplo de autenticação básica (que não era para o Bigquery, mas para outra API do Google):

  /** 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();
        }

}

SERVICE_ACCOUNT_EMAIL é o endereço de e-mail do formulário: [email protected]

Se eu remover a linha credential.refreshToken (), ela falhará nas listasDatasets na primeira chamada para Bigquery ... Caso contrário, falhará em credential.refreshToken () .. com o mesmo erro.

O BigQuery não aceita autenticação da conta de serviço?

Acredito que fiz tudo corretamente por meio do Console de APIs. Eu tenho:

Ativou o acesso à Big Query API.Criei uma conta de serviço na guia "Acesso à API".Baixei minha chave privada (que é referenciada pelo código acima).Dado o usuário da minha conta de serviço "pode ​​editar" o acesso na guia "Equipes".Faturamento ativado.

Eu perdi alguma coisa? Há mais alguma coisa que eu precise fazer?

Obrigado..

questionAnswers(2)

yourAnswerToTheQuestion