Authentifier vos requêtes

Les bibliothèques clientes Cloud pour Java utilisent la bibliothèque Google Auth pour Java pour authentifier les requêtes. Cette bibliothèque est compatible avec plusieurs types d'authentification. Pour en savoir plus, consultez les README.md et le javadoc du projet.

Authentification dans un environnement Google Cloud

Lorsque vous utilisez des bibliothèques Google Cloud à partir d'un environnement Google Cloud (tel que Compute Engine, Google Kubernetes Engine ou App Engine), vous n'avez pas besoin d'effectuer d'étapes d'authentification supplémentaires.

Exemple d'appel sans authentification supplémentaire :

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

Authentification dans les environnements autres queGoogle Cloud

Pour s'authentifier dans un environnement autre queGoogle Cloud , il existe trois options courantes :

  1. (Recommandé) Utilisez un compte de service.
  2. Utilisez le SDK Google Cloud avec un environnement de test local.
  3. Utilisez un jeton d'accès OAuth2 existant.

Utiliser un compte de service

  1. Générez une clé de compte de service JSON.

  2. Après avoir téléchargé la clé, vous devez effectuer l'une des opérations suivantes :

    • Définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS sur l'emplacement de la clé. Exemple :
    export GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/key.json
    
    • Fournissez le fichier d'identifiants JSON lorsque vous créez les options de service. Par exemple, cet objet Storage dispose des autorisations nécessaires pour interagir avec vos données Cloud Storage :
    Storage storage = StorageOptions.newBuilder()
        .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("/path/to/my/key.json")))
        .build()
        .getService();
    

Utiliser le SDK Google Cloud avec un environnement de test local

Si vous utilisez un environnement local pour le développement ou les tests, vous pouvez utiliser le SDK Google Cloud.

Créez des identifiants par défaut de l'application avec gcloud auth application-default login. Les bibliothèques clientes Cloud pour Java détecteront automatiquement ces identifiants.

Utiliser un jeton d'accès OAuth2 existant

Si vous disposez d'un jeton d'accès OAuth2, vous pouvez l'utiliser pour vous authentifier. Si vous le faites, le jeton d'accès n'est pas actualisé automatiquement :

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

Prenons cet autre exemple :

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

Identifiants par défaut de l'application

Si vous ne fournissez pas d'identifiants, les bibliothèques clientes Cloud pour Java tenteront de les détecter à partir de l'environnement à l'aide de GoogleCredentials.getApplicationDefault(). Cette méthode recherche les identifiants par défaut de l'application dans les emplacements suivants, dans l'ordre :

  1. Fichier d'identifiants pointé par la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.
  2. Identifiants fournis par la commande gcloud auth application-default login du SDK Google Cloud.
  3. Informations d'identification intégrées de Google App Engine.
  4. Google Cloud Identifiants intégrés de Shell.
  5. Identifiants du compte de service intégré de Google Compute Engine.

Authentification avec une clé API

Certaines API Google Cloud permettent l'authentification avec des clés API.

Pour utiliser une clé API avec les bibliothèques clientes Cloud pour Java, vous devez définir manuellement l'en-tête x-goog-api-key pour le client de service concerné.

Par exemple, pour définir la clé API avec 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;
  }

Voici un exemple d'instanciation avec le client Language utilisant 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;
  }