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
- Richten Sie Ihre Umgebung mit dem Leitfaden für die Google Cloud-Authentifizierung ein.
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.
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.
Mit JWTs authentifizieren
Sie können JWTs auf folgende Arten für die Authentifizierung verwenden:
- 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.
- Für vom System verwaltete Dienstkonten verwenden Sie die REST API oder die gcloud CLI.
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:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountJwtAccessCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: google.auth.jwt module
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
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
- Lesen Sie im Authentifizierungsleitfaden, wie Sie ein OAuth 2.0-Zugriffstoken programmatisch anfordern.