Autoriser les requêtes API

L'API BigQuery fait appel à des jetons d'accès OAuth 2.0 ou des jetons Web JSON (JWT) pour autoriser les requêtes. Ces jetons accordent un accès temporaire à une API.

Si possible, utilisez les identifiants par défaut de l'application dans votre application pour détecter les identifiants de sources connues, y compris les jetons OAuth 2.0 et JWT. Pour en savoir plus, consultez la section Rechercher automatiquement des identifiants.

Si vous ne pouvez pas utiliser les identifiants par défaut de l'application, vous pouvez utiliser le serveur OAuth 2.0 de Google pour obtenir un jeton d'accès OAuth 2.0. Si vous utilisez un compte de service pour l'authentification, utilisez plutôt un jeton JWT signé. L'utilisation d'un jeton JWT vous permet d'éviter d'envoyer une requête réseau au serveur d'autorisation de Google avant d'effectuer un appel d'API.

Avant de commencer

S'authentifier avec OAuth 2.0

Cette section explique comment fournir un jeton d'accès OAuth 2.0 à l'API BigQuery. Si vous utilisez les bibliothèques clientes BigQuery, vous n'avez pas besoin de ces informations, car le processus est automatique.

Niveaux d'accès

Les jetons d'accès sont associés à un champ d'application, qui limite leur accès. Consultez la liste complète des champs d'application des API Google pour connaître les champs d'application associés à l'API BigQuery.

Obtenir des jetons d'accès

Vous pouvez obtenir un jeton d'accès temporaire en utilisant les identifiants par défaut de l'application.

Ligne de commande

Servez-vous de Google Cloud CLI pour imprimer un jeton d'accès.

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

Consultez le guide d'authentification pour découvrir comment obtenir un jeton d'accès dans d'autres environnements.

Comme les jetons d'accès ne fournissent qu'une autorisation temporaire, vous devez les actualiser régulièrement.

Autoriser les requêtes

Pour autoriser les requêtes vers l'API BigQuery avec un jeton d'accès, utilisez l'une des méthodes d'utilisation des jetons OAuth 2.0.

En-tête de requête

Définissez le jeton dans l'en-tête de requête Authorization avec la valeur Bearer ACCESS_TOKEN.

Ligne de commande

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

S'authentifier avec des jetons JWT

Vous pouvez utiliser des jetons JWT pour vous authentifier comme suit :

Cible

Pour les jetons JWT, une revendication d'audience est utilisée à la place d'un champ d'application. Pour les API BigQuery, définissez la valeur de l'audience sur https://bigquery.googleapis.com/.

Créer des jetons JWT avec des bibliothèques clientes

Pour les clés de compte de service créées dans Google Cloud Console ou à l'aide de la CLI gcloud, utilisez une bibliothèque cliente qui fournit une signature JWT. La liste suivante présente certaines options appropriées pour les langages de programmation courants :

Exemple Java

L'exemple suivant utilise la bibliothèque cliente BigQuery pour Java pour créer et signer un jeton JWT.

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

Créer des jetons JWT avec REST ou gcloud CLI

Pour les comptes de service gérés par le système, vous devez assembler manuellement le jeton JWT, puis utiliser la méthode REST projects.serviceAccounts.signJwt ou la commande gcloud beta iam service-accounts sign-jwt de Google Cloud CLI pour signer le jeton JWT. Pour utiliser l'une de ces approches, vous devez disposer du rôle IAM (Identity and Access Management) Créateur de jetons du compte de service.

Exemple gcloud CLI

L'exemple suivant présente un script bash qui assemble un jeton JWT, puis utilise la commande gcloud beta iam service-accounts sign-jwt pour le signer.

#!/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"

Étape suivante