API-Anfragen autorisieren

Die BigQuery API verwendet zum Autorisieren von Anwendungen OAuth 2.0-Zugriffstokens oder JSON Web Tokens (JWTs). Diese Tokens gewähren vorübergehenden Zugriff auf eine API.

Nach Möglichkeit sollten Sie in Ihrer Anwendung die Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) verwenden, um Anmeldedaten aus bekannten Quellen wie OAuth 2.0 und JWTs zu erkennen. Weitere Informationen finden Sie unter Anmeldedaten automatisch finden.

Wenn Sie keine ADC verwenden können, können Sie den OAuth 2.0-Server von Google verwenden, um ein OAuth 2.0-Zugriffstoken abzurufen. Wenn Sie ein Dienstkonto zur Authentifizierung verwenden, können Sie stattdessen ein signiertes JWT verwenden. Wenn Sie ein JWT verwenden, können Sie umgehen, dass eine Netzwerkanfrage an den Autorisierungsserver von Google gesendet wird, bevor Sie einen API-Aufruf vornehmen.

Hinweis

Authentifizieren mit OAuth 2.0

In diesem Abschnitt wird beschrieben, wie Sie der BigQuery API ein OAuth 2.0-Zugriffstoken bereitstellen. Wenn Sie die BigQuery-Clientbibliotheken verwenden, benötigen Sie diese Informationen nicht, da dies automatisch erfolgt.

Bereiche

Ein Zugriffstoken ist mit einem Bereich verbunden, der den Zugriff des Tokens begrenzt. Welche Bereiche mit der BigQuery API verbunden sind, entnehmen Sie der vollständigen Liste der Google API-Bereiche.

Zugriffstokens abrufen

Rufen Sie mithilfe der Standardanmeldedaten für Anwendungen ein temporäres Zugriffstoken ab.

Befehlszeile

Verwenden Sie die Google Cloud CLI, um ein Zugriffstoken auszugeben.

ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"

Lesen Sie im Authentifizierungsleitfaden, wie Sie ein Zugriffstoken in anderen Umgebungen abrufen.

Da Zugriffstokens nur eine vorübergehende Autorisierung ermöglichen, müssen sie regelmäßig aktualisiert werden.

Anfragen autorisieren

Um Anfragen an die BigQuery API mit einem Zugriffstoken zu autorisieren, verwenden Sie eine der Nutzungsmethoden für OAuth 2.0-Token.

Anfrage-Header

Legen Sie das Token im Anfrage-Header Authorization mit dem Wert Bearer ACCESS_TOKEN fest.

Befehlszeile

curl -H "Authorization: Bearer $ACCESS_TOKEN" \
  "https://www.googleapis.com/bigquery/v2/projects/$GOOGLE_CLOUD_PROJECT/datasets"

Mit JWTs authentifizieren

Sie können JWTs auf folgende Arten für die Authentifizierung verwenden:

Zielgruppe

Für JWTs wird anstelle eines Bereichs eine Zielgruppenanforderung verwendet. Legen Sie für die BigQuery APIs als Zielgruppenwert https://bigquery.googleapis.com/ fest.

JWTs mit Clientbibliotheken erstellen

Verwenden Sie für Dienstkontoschlüssel, die in der Google Cloud Console oder mithilfe der gcloud CLI erstellt wurden, eine Clientbibliothek, die JWT-Signaturen bereitstellt. Im Folgenden finden Sie einige geeignete Optionen für gängige Programmiersprachen:

Beispiel für Java

Im folgenden Beispiel wird die BigQuery-Clientbibliothek für Java verwendet, um ein JWT zu erstellen und zu signieren.

import com.google.auth.Credentials;
import com.google.auth.oauth2.ServiceAccountJwtAccessCredentials;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;

import java.io.FileInputStream;
import java.net.URI;

public class Example {
    public static void main(String... args) throws Exception {
        String projectId = "myproject";
        // Load JSON file that contains service account keys and create ServiceAccountJwtAccessCredentials object.
        String credentialsPath = "/path/to/key.json";
        URI audience = URI.create("https://bigquery.googleapis.com/");
        Credentials credentials = null;
        try (FileInputStream is = new FileInputStream(credentialsPath)) {
            credentials = ServiceAccountJwtAccessCredentials.fromStream(is, audience);
        }
        // Instantiate BigQuery client with the credentials object.
        BigQuery bigquery =
                BigQueryOptions.newBuilder().setCredentials(credentials).build().getService();
        // Use the client to list BigQuery datasets.
        System.out.println("Datasets:");
        bigquery
            .listDatasets(projectId)
            .iterateAll()
            .forEach(dataset -> System.out.printf("%s%n", dataset.getDatasetId().getDataset()));
    }
}

JWTs mit REST oder der gcloud CLI erstellen

Für vom System verwaltete Dienstkonten müssen Sie das JWT manuell zusammenstellen und dann die REST-Methode projects.serviceAccounts.signJwt oder den Google Cloud CLI-Befehl gcloud beta iam service-accounts sign-jwt verwenden, um das JWT zu signieren. Sie müssen Mitglied der Rolle Ersteller von Dienstkonto-Tokens für die Identitäts- und Zugriffsverwaltung sein, um so vorzugehen.

Beispiel für die gcloud CLI

Das folgende Beispiel zeigt ein Bash-Skript, das ein JWT zusammenstellt und dann mit dem Befehl gcloud beta iam service-accounts sign-jwt signiert.

#!/bin/bash

SA_EMAIL_ADDRESS="myserviceaccount@myproject.iam.gserviceaccount.com"

TMP_DIR=$(mktemp -d /tmp/sa_signed_jwt.XXXXX)
trap "rm -rf ${TMP_DIR}" EXIT
JWT_FILE="${TMP_DIR}/jwt-claim-set.json"
SIGNED_JWT_FILE="${TMP_DIR}/output.jwt"

IAT=$(date '+%s')
EXP=$((IAT+3600))

cat <<EOF > $JWT_FILE
{
  "aud": "https://bigquery.googleapis.com/",
  "iat": $IAT,
  "exp": $EXP,
  "iss": "$SA_EMAIL_ADDRESS",
  "sub": "$SA_EMAIL_ADDRESS"
}
EOF

gcloud beta iam service-accounts sign-jwt --iam-account $SA_EMAIL_ADDRESS $JWT_FILE $SIGNED_JWT_FILE

echo "Datasets:"
curl -L -H "Authorization: Bearer $(cat $SIGNED_JWT_FILE)" \
-X GET \
"https://bigquery.googleapis.com/bigquery/v2/projects/myproject/datasets?alt=json"

Nächste Schritte