Authentifier vos requêtes

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

Authentification dans un Google Cloud environnement

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

Voici un exemple d'appel sans authentification supplémentaire :

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

Authentification dans desenvironnements non-Google Cloud

Pour vous authentifier dans unenvironnement non-Google Cloud , vous disposez de trois options courantes :

  1. (Recommandé) Utiliser un compte de service
  2. Utiliser Google Cloud SDK avec un environnement de test local
  3. Utiliser 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 lors de la création des 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 Google Cloud SDK 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. Dans ce cas, 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. Le fichier d'identifiants vers lequel pointe la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.
  2. Les identifiants fournis par la commande gcloud auth application-default login de Google Cloud SDK.
  3. Les identifiants intégrés de Google App Engine.
  4. Google Cloud Les identifiants intégrés du shell.
  5. Les identifiants de compte de service intégrés de Google Compute Engine.

Authentification avec une clé API

Certaines Google Cloud API sont compatibles avec l'authentification à l'aide de 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 le 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 de langage à l'aide de 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;
  }