Como autorizar solicitações de API
A API BigQuery usa tokens de acesso OAuth 2.0 ou JSON Web Tokens (JWTs) para autorizar solicitações. Esses tokens concedem acesso temporário a uma API.
Quando possível, use o Application Default Credentials (ADC) no seu aplicativo para descobrir credenciais de fontes conhecidas, incluindo o OAuth 2.0 e o JWTs. Para mais informações, consulte Como encontrar credenciais automaticamente.
Se você não puder usar o ADC, use o servidor OAuth 2.0 do Google para conseguir um token de acesso do OAuth 2.0 ou, se estiver usando uma conta de serviço para autenticação, será possível usar um JWT assinado. Usar um JWT permite que você evite fazer uma solicitação de rede para o servidor de autorização do Google antes de fazer uma chamada de API.
Antes de começar
- Siga o guia de autenticação do Google Cloud para configurar o ambiente.
Autenticar com o OAuth 2.0
Nesta seção, mostramos como fornecer um token de acesso do OAuth 2.0 para a API BigQuery. Se você usar as bibliotecas de cliente do BigQuery, essas informações não serão necessárias, já que isso será feito automaticamente.
Escopos
Os tokens de acesso são associados a um escopo, o que limita o acesso do token. Verifique a lista completa de escopos da API do Google (em inglês) para ver os escopos associados à API BigQuery.
Receber tokens de acesso
Receba um token de acesso temporário usando o Application Default Credentials.
Consulte o guia de autenticação para saber como conseguir um token de acesso em outros ambientes.
Como os tokens de acesso oferecem autorização apenas temporária, você precisa atualizá-los periodicamente.
Autorizar solicitações
Para autorizar solicitações à BigQuery API com um token de acesso, use qualquer um dos métodos de uso do token OAuth 2.0.
Cabeçalho da solicitação
Defina o token no cabeçalho da solicitação Authorization
com o valor Bearer ACCESS_TOKEN
.
Autenticar com JWTs
É possível usar JWTs para autenticação das seguintes maneiras:
- Para chaves de conta de serviço criadas no Console do Google Cloud ou com a CLI gcloud, use uma biblioteca de cliente que forneça assinatura JWT.
- Para contas de serviço gerenciadas pelo sistema, use a API REST ou a CLI gcloud.
Público-alvo
Para JWTs, uma
declaração de público-alvo é
usada em vez de um escopo. Para as APIs do BigQuery, defina o valor
de público-alvo como https://bigquery.googleapis.com/
.
Criar JWTs com bibliotecas de cliente
Para chaves de conta de serviço criadas no Console do Google Cloud ou com a CLI gcloud, use uma biblioteca de cliente que forneça assinatura JWT. A lista a seguir fornece algumas opções apropriadas para linguagens de programação conhecidas:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountJwtAccessCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: google.auth.jwt module
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Exemplo do Java
No exemplo a seguir, usamos a biblioteca de cliente do BigQuery para Java para criar e assinar um 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()));
}
}
Criar JWTs com REST ou a CLI gcloud
Para contas de serviço gerenciadas pelo sistema, é necessário montar o JWT manualmente e
usar o método REST
projects.serviceAccounts.signJwt
ou o comando da Google Cloud CLI
gcloud beta iam service-accounts sign-jwt
para assinar o JWT. Para usar uma dessas abordagens, é preciso ser membro do
papel de criador de tokens da conta de serviço
de gerenciamento de identidade e acesso.
Exemplo da CLI gcloud
O exemplo a seguir mostra um script bash que monta um JWT e usa o
comando gcloud beta iam service-accounts sign-jwt
para assiná-lo.
#!/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"
A seguir
- Para saber como obter programaticamente um token de acesso do OAuth 2.0, consulte os guias de autenticação.