Autenticar suas solicitações

As bibliotecas de cliente do Cloud para Java usam a biblioteca de autenticação do Google para Java para autenticar solicitações. Essa biblioteca oferece suporte a vários tipos de autenticação. Para mais detalhes, consulte o README.md e o javadoc do projeto.

Autenticação em um ambiente Google Cloud

Ao usar bibliotecas Google Cloud de um ambiente Google Cloud (como o Compute Engine, o Google Kubernetes Engine ou o App Engine), não é necessário realizar etapas de autenticação adicionais.

Exemplo de uma chamada sem autenticação extra:

Storage storage = StorageOptions.getDefaultInstance().getService();

Autenticação em ambientes que não sãoGoogle Cloud

Para autenticar em um ambiente que não sejaGoogle Cloud , há três opções comuns:

  1. (Recomendado) Use uma conta de serviço.
  2. Use o SDK do Google Cloud com um ambiente de teste local.
  3. Use um token de acesso OAuth2 atual.

Usar uma conta de serviço

  1. Gere uma chave de conta de serviço JSON.

  2. Depois de baixar a chave, faça uma destas ações:

    • Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o local da chave. Exemplo:
    export GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/key.json
    
    • Forneça o arquivo de credenciais JSON ao criar as opções de serviço. Por exemplo, este objeto Storage tem as permissões necessárias para interagir com seus dados do Cloud Storage:
    Storage storage = StorageOptions.newBuilder()
        .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("/path/to/my/key.json")))
        .build()
        .getService();
    

Usar o SDK do Google Cloud com um ambiente de teste local

Se você estiver usando um ambiente local para desenvolvimento ou teste, use o SDK do Google Cloud.

Crie o Application Default Credentials com gcloud auth application-default login. As bibliotecas de cliente do Cloud para Java detectam automaticamente essas credenciais.

Usar um token de acesso do OAuth2

Se você tiver um token de acesso OAuth2, poderá usá-lo para autenticar. Se você fizer isso, o token de acesso não será atualizado automaticamente:

Credentials credentials = GoogleCredentials.create(new AccessToken(accessToken, expirationTime));
Storage storage = StorageOptions.newBuilder()
    .setCredentials(credentials)
    .build()
    .getService();

Outro exemplo:

Credentials credentials = GoogleCredentials.create(new AccessToken(accessToken, expirationTime));
CloudTasksSettings cloudTasksSettings = CloudTasksSettings.newBuilder()
    .setCredentialProvider(FixedCredentialsProvider.create(credentials))
    .build();
CloudTasksClient cloudTasksClient = CloudTasksClient.create(cloudTasksSettings);

Application Default Credentials

Se você não fornecer credenciais, as bibliotecas de cliente do Cloud para Java vão tentar detectá-las no ambiente usando GoogleCredentials.getApplicationDefault(). Esse método procura Application Default Credentials nos seguintes locais, em ordem:

  1. O arquivo de credenciais apontado pela variável de ambiente GOOGLE_APPLICATION_CREDENTIALS.
  2. Credenciais fornecidas pelo comando gcloud auth application-default login do SDK do Google Cloud.
  3. Credenciais integradas do Google App Engine.
  4. Google Cloud Credenciais integradas do shell.
  5. Credenciais da conta de serviço integrada do Google Compute Engine.

Autenticação com uma chave de API

Algumas APIs Google Cloud aceitam autenticação com chaves de API.

Para usar uma chave de API com as bibliotecas de cliente do Cloud para Java, defina manualmente o cabeçalho x-goog-api-key para o cliente de serviço relevante.

Por exemplo, para definir a chave de API com o Language service:

public LanguageServiceClient createGrpcClientWithApiKey(String apiKey) throws Exception {
    // Manually set the API key using the header
    Map<String, String> header = new HashMap<String, String>() { {put("x-goog-api-key", apiKey);}};
    FixedHeaderProvider headerProvider = FixedHeaderProvider.create(header);

    // Create the client
    TransportChannelProvider transportChannelProvider = InstantiatingGrpcChannelProvider.newBuilder().setHeaderProvider(headerProvider).build();
    LanguageServiceSettings settings = LanguageServiceSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
    LanguageServiceClient client = LanguageServiceClient.create(settings);
    return client;
  }

Exemplo de instanciação com o cliente de linguagem usando REST:

 public LanguageServiceClient createRestClientWithApiKey(String apiKey) throws Exception {
    // Manually set the API key header
    Map<String, String> header = new HashMap<String, String>() { {put("x-goog-api-key", apiKey);}};
    FixedHeaderProvider headerProvider = FixedHeaderProvider.create(header);

    // Create the client
    TransportChannelProvider transportChannelProvider = InstantiatingHttpJsonChannelProvider.newBuilder().setHeaderProvider(headerProvider).build();
    LanguageServiceSettings settings = LanguageServiceSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
    LanguageServiceClient client = LanguageServiceClient.create(settings);
    return client;
  }