Autoriza solicitudes a la API
La API de BigQuery usa tokens de acceso de OAuth 2.0 o tokens web JSON (JWT) para autorizar solicitudes. Estos tokens otorgan acceso temporal a una API.
Cuando sea posible, debes usar las credenciales predeterminadas de la aplicación (ADC) en tu aplicación para descubrir credenciales de fuentes conocidas, incluidas OAuth 2.0 y JWT. Para obtener más información, consulta Busca credenciales de forma automática.
Si no puedes usar ADC, puedes usar el servidor de OAuth 2.0 de Google para obtener un token de acceso de OAuth 2.0 o, si usas una cuenta de servicio para la autenticación, puedes usar un JWT firmado en su lugar. El uso de un JWT te permite evitar realizar una solicitud de red al servidor de autorización de Google antes de realizar una llamada a la API.
Antes de comenzar
- Sigue la guía de autenticación de Google Cloud para configurar tu entorno.
Autentica con OAuth 2.0
En esta sección, se muestra cómo proporcionar un token de acceso de OAuth 2.0 a la API de BigQuery. Si usas las bibliotecas cliente de BigQuery, no necesitas esta información, ya que se hace de manera automática.
Permisos
Los tokens de acceso se asocian con un alcance, que limita su acceso. Consulta la lista completa de los permisos de la API de Google para conocer todos los permisos asociados con la API de BigQuery.
Obtén tokens de acceso
Obtén tokens de acceso temporales mediante las credenciales predeterminadas de la aplicación.
Consulta la guía de autenticación para aprender a obtener un token de acceso en otros entornos.
Debido a que los tokens de acceso solo proporcionan autorización temporal, debes actualizarlos de forma periódica.
Autoriza solicitudes
A fin de autorizar solicitudes a la API de BigQuery con un token de acceso, utiliza cualquiera de los métodos de uso de token OAuth 2.0.
Encabezado de la solicitud
Establece el token en el encabezado de la solicitud Authorization
con el valor Bearer ACCESS_TOKEN
.
Autentica con JWT
Puedes usar JWT para autenticarte de las siguientes maneras:
- Para las claves de la cuenta de servicio creadas en la consola de Google Cloud o mediante la CLI de gcloud, usa una biblioteca cliente que proporcione firma de JWT.
- Para las cuentas de servicio administradas por el sistema, usa la API de REST o la CLI de gcloud.
Público
Para los JWT, se usa una reclamación de público en lugar de un alcance. En las API de BigQuery, establece el valor del público en https://bigquery.googleapis.com/
.
Crea JWT con bibliotecas cliente
Para las claves de cuenta de servicio creadas en la consola de Google Cloud o mediante la CLI de gcloud, usa una biblioteca cliente que proporcione firma de JWT. En la siguiente lista, se proporcionan algunas opciones adecuadas para los lenguajes de programación populares:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountJwtAccessCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: google.auth.jwt module
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Ejemplo de Java
En el siguiente ejemplo, se usa la biblioteca cliente de BigQuery para Java a fin de crear y firmar un 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()));
}
}
Crea JWT con REST o la CLI de gcloud
Para las cuentas de servicio administradas por el sistema, debes ensamblar el JWT de forma manual y, luego, usar el método RESTprojects.serviceAccounts.signJwt
o al comando gcloud beta iam service-accounts sign-jwt
de la CLI de Google Cloud. para firmar el JWT. Para usar cualquiera de estos enfoques, debes ser miembro del rol creador de tokens de cuenta de servicio de Identity and Access Management.
Ejemplo de la CLI de gcloud
En el siguiente ejemplo, se muestra una secuencia de comandos bash que ensambla un JWT y, luego, usa el comando gcloud beta iam service-accounts sign-jwt
para firmarlo.
#!/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"
¿Qué sigue?
- Para aprender a obtener un token de acceso OAuth 2.0 de manera programática, consulta las guías de autenticación.