Melakukan otorisasi permintaan API
BigQuery API menggunakan token akses OAuth 2.0 atau Token Web JSON (JWT) untuk mengizinkan permintaan. Token ini memberikan akses sementara ke API.
Jika memungkinkan, Anda harus menggunakan Kredensial Default Aplikasi (ADC) dalam aplikasi Anda untuk menemukan kredensial dari sumber terkenal, termasuk OAuth 2.0 dan JWT. Untuk mengetahui informasi selengkapnya, lihat Menemukan kredensial secara otomatis.
Jika tidak dapat menggunakan ADC, Anda dapat menggunakan server OAuth 2.0 Google untuk mendapatkan token akses OAuth 2.0. Atau, jika menggunakan akun layanan untuk autentikasi, Anda dapat menggunakan JWT yang ditandatangani. Dengan JWT, Anda dapat menghindari permintaan jaringan ke server otorisasi Google sebelum melakukan panggilan API.
Sebelum memulai
- Ikuti Panduan autentikasi Google Cloud untuk menyiapkan lingkungan Anda.
Melakukan autentikasi dengan OAuth 2.0
Bagian ini menunjukkan cara menyediakan token akses OAuth 2.0 ke BigQuery API. Jika menggunakan library klien BigQuery, Anda tidak memerlukan informasi ini, karena akan otomatis dilakukan untuk Anda.
Cakupan
Token akses dikaitkan dengan cakupan, yang membatasi akses token. Lihat daftar lengkap cakupan Google API untuk cakupan yang terkait dengan BigQuery API.
Mendapatkan token akses
Dapatkan token akses sementara menggunakan Kredensial default aplikasi.
Lihat panduan autentikasi untuk mempelajari cara mendapatkan token akses di lingkungan lain.
Karena token akses hanya memberikan otorisasi sementara, Anda harus memperbaruinya secara berkala.
Mengizinkan permintaan
Untuk mengizinkan permintaan ke BigQuery API dengan token akses, gunakan salah satu metode penggunaan token OAuth 2.0.
Header permintaan
Tetapkan token di header permintaan Authorization
dengan nilai Bearer ACCESS_TOKEN
.
Melakukan autentikasi dengan JWT
Anda dapat menggunakan JWT untuk mengautentikasi dengan cara berikut:
- Untuk kunci akun layanan yang dibuat di Google Cloud Console atau dengan gcloud CLI, gunakan library klien yang menyediakan penandatanganan JWT.
- Untuk akun layanan yang dikelola sistem, gunakan REST API atau gcloud CLI.
Audience
Untuk JWT, klaim audiens digunakan, alih-alih cakupan. Untuk BigQuery API, tetapkan nilai audience ke https://bigquery.googleapis.com/
.
Membuat JWT dengan library klien
Untuk kunci akun layanan yang dibuat di Konsol Google Cloud atau dengan gcloud CLI, gunakan library klien yang menyediakan penandatanganan JWT. Daftar berikut memberikan beberapa opsi yang sesuai untuk bahasa pemrograman populer:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountJwtAccessCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: modul google.auth.jwt
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Contoh Java
Contoh berikut menggunakan library klien BigQuery untuk Java guna membuat dan menandatangani 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()));
}
}
Membuat JWT dengan REST atau gcloud CLI
Untuk akun layanan yang dikelola sistem, Anda harus menyusun JWT secara manual, lalu menggunakan metode REST projects.serviceAccounts.signJwt
atau perintah Google Cloud CLI gcloud beta iam service-accounts sign-jwt
untuk menandatangani JWT. Untuk menggunakan salah satu pendekatan ini, Anda harus menjadi anggota peran Identity and Access Management Service Account Token Creator.
Contoh gcloud CLI
Contoh berikut menunjukkan skrip bash yang menyusun JWT, lalu menggunakan perintah gcloud beta iam service-accounts sign-jwt
untuk menandatanganinya.
#!/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"
Langkah berikutnya
- Untuk mempelajari cara mendapatkan token akses OAuth 2.0 secara terprogram, lihat panduan autentikasi.