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
- Suivez le guide d'authentification Google Cloud pour configurer votre environnement.
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.
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
.
S'authentifier avec des jetons JWT
Vous pouvez utiliser des jetons JWT pour vous authentifier comme suit :
- 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.
- Pour les comptes de service gérés par le système, utilisez l'API REST ou la CLI gcloud.
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 :
- Go : func JWTAccessTokenSourceFromJSON
- Java : Class ServiceAccountJwtAccessCredentials
- Node.js : Class JWTAccess
- PHP : ServiceAccountJwtAccessCredentials
- Python : google.auth.jwt module
- Ruby : Class: Google::Auth::ServiceAccountJwtHeaderCredentials
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
- Pour savoir comment obtenir automatiquement un jeton d'accès OAuth 2.0, consultez les guides d'authentification.