Anfragen authentifizieren

Die Cloud-Clientbibliotheken für Java verwenden die Google-Authentifizierungsbibliothek für Java, um Anfragen zu authentifizieren. Diese Bibliothek unterstützt mehrere Authentifizierungstypen. Weitere Informationen finden Sie in der README.md und der javadoc des Projekts.

Authentifizierung in einer Google Cloud Umgebung

Wenn Sie Google Cloud -Bibliotheken aus einer Google Cloud -Umgebung (z. B. Compute Engine, Google Kubernetes Engine oder App Engine) verwenden, sind keine zusätzlichen Authentifizierungsschritte erforderlich.

Beispiel für einen Aufruf ohne zusätzliche Authentifizierung:

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

Authentifizierung in Nicht-Google Cloud -Umgebungen

Für die Authentifizierung in einer Umgebung, die nichtGoogle Cloud ist, gibt es drei gängige Optionen:

  1. Empfohlen: Verwenden Sie ein Dienstkonto.
  2. Verwenden Sie das Google Cloud SDK mit einer lokalen Testumgebung.
  3. Verwenden Sie ein vorhandenes OAuth2-Zugriffstoken.

Dienstkonto verwenden

  1. JSON-Dienstkontoschlüssel generieren

  2. Nachdem Sie den Schlüssel heruntergeladen haben, müssen Sie einen der folgenden Schritte ausführen:

    • Definieren Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS als Speicherort des Schlüssels. Beispiel:
    export GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/key.json
    
    • Geben Sie die JSON-Datei mit den Anmeldedaten an, wenn Sie die Dienstoptionen erstellen. Dieses Storage-Objekt hat beispielsweise die erforderlichen Berechtigungen für die Interaktion mit Ihren Cloud Storage-Daten:
    Storage storage = StorageOptions.newBuilder()
        .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("/path/to/my/key.json")))
        .build()
        .getService();
    

Google Cloud SDK mit einer lokalen Testumgebung verwenden

Wenn Sie eine lokale Umgebung für die Entwicklung oder das Testen verwenden, können Sie das Google Cloud SDK verwenden.

Erstellen Sie Standardanmeldedaten für Anwendungen mit gcloud auth application-default login. Cloud-Clientbibliotheken für Java erkennen diese Anmeldedaten automatisch.

Vorhandenes OAuth2-Zugriffstoken verwenden

Wenn Sie ein OAuth2-Zugriffstoken haben, können Sie es zur Authentifizierung verwenden. Wenn Sie das tun, wird das Zugriffstoken nicht automatisch aktualisiert:

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

Ein weiteres Beispiel:

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

Standardanmeldedaten für Anwendungen

Wenn Sie keine Anmeldedaten angeben, versuchen die Cloud-Clientbibliotheken für Java, sie mithilfe von GoogleCredentials.getApplicationDefault() aus der Umgebung zu erkennen. Bei dieser Methode wird in der folgenden Reihenfolge an den folgenden Standorten nach Standardanmeldedaten für Anwendungen gesucht:

  1. Die von der Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS referenzierte Datei mit Anmeldedaten.
  2. Anmeldedaten, die vom Google Cloud SDK-Befehl gcloud auth application-default login bereitgestellt werden.
  3. Die integrierten Anmeldedaten von Google App Engine.
  4. Google Cloud Integrierte Anmeldedaten von Shell.
  5. In Google Compute Engine integrierte Anmeldedaten für Dienstkonten.

Authentifizierung mit einem API-Schlüssel

Einige Google Cloud APIs unterstützen die Authentifizierung mit API-Schlüsseln.

Wenn Sie einen API-Schlüssel mit Cloud-Clientbibliotheken für Java verwenden möchten, müssen Sie den x-goog-api-key-Header für den entsprechenden Dienstclient manuell festlegen.

So legen Sie beispielsweise den API-Schlüssel mit Language service fest:

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;
  }

Beispiel für die Instanziierung mit dem Language Client über 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;
  }