Autorizzazione delle richieste API
L'API BigQuery utilizza i token di accesso OAuth 2.0 o i token web JSON (JWT) per autorizzare le richieste. Questi token concedono l'accesso temporaneo a un'API.
Quando possibile, devi utilizzare Credenziali predefinite dell'applicazione (ADC) nell'applicazione per rilevare le credenziali da origini note, tra cui OAuth 2.0 e JWT. Per saperne di più, consulta Trovare automaticamente le credenziali.
Se non puoi utilizzare ADC, puoi utilizzare il server OAuth 2.0 di Google per ottenere un token di accesso OAuth 2.0 oppure, se utilizzi un account di servizio per l'autenticazione, puoi utilizzare un JWT firmato. L'utilizzo di un JWT ti consente di evitare di effettuare una richiesta di rete al server di autorizzazione di Google prima di effettuare una chiamata API.
Prima di iniziare
- Segui la guida all'autenticazione di Google Cloud per configurare il tuo ambiente.
Autenticazione con OAuth 2.0
Questa sezione mostra come fornire un token di accesso OAuth 2.0 all'API BigQuery. Se utilizzi le librerie client di BigQuery, queste informazioni non sono necessarie, poiché questa operazione viene eseguita automaticamente.
Ambiti
I token di accesso sono associati a un ambito, che limita l'accesso del token. Consulta l'elenco completo degli ambiti API di Google per gli ambiti associati all'API BigQuery.
Recuperare i token di accesso
Ottieni un token di accesso temporaneo utilizzando Credenziali predefinite dell'applicazione.
Consulta la guida all'autenticazione per scoprire come ottenere un token di accesso in altri ambienti.
Poiché i token di accesso forniscono solo autorizzazioni temporanee, devi aggiornarli periodicamente.
Autorizzazione delle richieste
Per autorizzare le richieste all'API BigQuery con un token di accesso, utilizza uno dei metodi di utilizzo del token OAuth 2.0.
Intestazione della richiesta
Imposta il token nell'intestazione della richiesta Authorization
con il valore Bearer ACCESS_TOKEN
.
Autenticazione con JWT
Puoi utilizzare i JWT per l'autenticazione nei seguenti modi:
- Per le chiavi degli account di servizio create nella console Google Cloud o utilizzando gcloud CLI, utilizza una libreria client che fornisca la firma JWT.
- Per gli account di servizio gestiti dal sistema, utilizza l'API REST o gcloud CLI.
Pubblico
Per i JWT, viene utilizzata una
rivendicazione del pubblico
anziché un ambito. Per le API BigQuery, imposta il valore
per il pubblico su https://bigquery.googleapis.com/
.
Creazione di JWT con librerie client
Per le chiavi degli account di servizio create nella console Google Cloud o utilizzando gcloud CLI, utilizza una libreria client che fornisca la firma JWT. Il seguente elenco fornisce alcune opzioni appropriate per i linguaggi di programmazione più diffusi:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountJwtAccessCredentials
- Node.js: Classe JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: modulo google.auth.jwt
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Esempio Java
L'esempio seguente utilizza la libreria client di BigQuery per Java per creare e firmare 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 gcloud CLI
Per gli account di servizio gestiti dal sistema, devi assemblare manualmente il JWT, quindi
utilizzare il metodo REST
projects.serviceAccounts.signJwt
o il comando Google Cloud CLI
gcloud beta iam service-accounts sign-jwt
per firmare il JWT. Per utilizzare uno di questi approcci, devi essere membro del ruolo
Creatore token account di servizio
Identity and Access Management.
Esempio della gcloud CLI
L'esempio seguente mostra uno script bash che assembla un JWT e poi utilizza il comando gcloud beta iam service-accounts sign-jwt
per 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"
Passaggi successivi
- Per informazioni su come ottenere un token di accesso OAuth 2.0 in modo programmatico, consulta le guide per l'autenticazione.