Melakukan delegasi otoritas di seluruh domain Google Workspace

Cloud Search Query API mewajibkan panggilan API diberi otorisasi menggunakan kredensial OAuth milik pengguna berlisensi di domain Anda. Secara default, akun layanan, yang digunakan untuk mengakses API pengindeksan dan konfigurasi, tidak dapat digunakan untuk panggilan API kueri karena bukan pengguna domain dengan lisensi Cloud Search atau Google Workspace. Jika Anda ingin menggunakan akun layanan saat mengautentikasi panggilan API kueri, administrator domain dapat memberikan akses seluruh domain ke data pengguna — hal ini dikenal sebagai delegasi otoritas seluruh domain. Akun layanan dengan otorisasi yang didelegasikan dapat meniru identitas pengguna mana pun, termasuk pengguna dengan akses ke Cloud Search.

Membuat akun layanan dan kredensial

Jika Anda belum memiliki kredensial akun layanan, lihat Membuat kredensial akun layanan.

Mendelegasikan otoritas seluruh domain ke akun layanan Anda

Untuk mengakses data pengguna di domain Google Workspace, akun layanan yang Anda buat harus diberi akses oleh administrator super untuk domain tersebut. Untuk mengetahui informasi selengkapnya tentang delegasi tingkat domain, lihat Mengontrol akses Google Workspace API dengan delegasi tingkat domain.

Untuk mendelegasikan otoritas seluruh domain ke akun layanan:

  1. Dari konsol Admin domain Anda, buka Menu utama > Keamanan > Kontrol data dan akses > Kontrol API.
  2. Di panel Delegasi tingkat domain, pilih Kelola Delegasi Tingkat Domain.

  3. Klik Tambahkan baru.

  4. Di kolom Client ID, masukkan client ID yang diperoleh dari langkah-langkah pembuatan akun layanan di atas.

  5. Di kolom Cakupan OAuth, masukkan daftar cakupan yang dipisahkan koma yang diperlukan untuk aplikasi Anda. Gunakan cakupan https://www.googleapis.com/auth/cloud_search.query untuk aplikasi penelusuran menggunakan Query API.

  6. Klik Authorize.

Akun layanan Anda kini memiliki akses tingkat domain ke Cloud Search Query API, dan dapat meniru identitas pengguna domain Anda dalam cakupan ini. Anda siap membuat instance objek layanan Cloud Search API yang diotorisasi atas nama pengguna domain Anda.

Membuat instance objek layanan Cloud Search API

Bagian ini menunjukkan cara membuat instance objek layanan Cloud Search API, lalu memberi otorisasi untuk membuat permintaan API menggunakan OAuth 2.0 dan kredensial akun layanan Anda untuk melakukan delegasi seluruh domain Google Workspace. Contoh ini membaca informasi akun layanan dari file kunci pribadi berformat JSON.

Java

import java.util.Collections;
import java.io.FileInputStream;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.services.cloudsearch.v1.CloudSearch;
import com.google.api.services.cloudsearch.v1.CloudSearchScopes;
...

/** Path to the Service Account's Private Key file */
private static final String SERVICE_ACCOUNT_FILE_PATH = "/path/to/key.json";

/**
 * Build and return a Cloud Search service object authorized with the service
 * account that acts on behalf of the given user.
 *
 * @param userEmail The email of the user to impersonate. Needs permissions to access Cloud Search.
 * @return CloudSearch service object that is ready to make requests.
 */
public static CloudSearch getCloudSearchAPIService(String userEmail)
    throws FileNotFoundException, IOException {

  FileInputStream credsFile = new FileInputStream(SERVICE_ACCOUNT_FILE_PATH);

  GoogleCredential init = GoogleCredential.fromStream(credsFile);

  HttpTransport httpTransport = init.getTransport();
  JsonFactory jsonFactory = init.getJsonFactory();

  GoogleCredential creds = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(init.getServiceAccountId())
      .setServiceAccountPrivateKey(init.getServiceAccountPrivateKey())
      .setServiceAccountScopes(Collections.singleton(CloudSearchScopes.CLOUD_SEARCH_QUERY))
      .setServiceAccountUser(userEmail)
      .build();

  CloudSearch service = new CloudSearch.Builder(httpTransport, jsonFactory, creds).build();

  return service;
}

Python

from google.oauth2 import service_account
from googleapiclient.discovery import build

# Path to the Service Account's Private Key file
SERVICE_ACCOUNT_FILE_PATH = "/path/to/key.json"

def create_query_api_service(user_email):
    """Build and return a CloudSearch service object authorized with the service
    account that acts on behalf of the given user.

    Args:
        user_email: The email of the user to impersonate. Needs permissions to access Cloud Search.
    Returns:
        Cloud Search Query API service object that is ready to make requests.
    """
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE_PATH,
        scopes=['https://www.googleapis.com/auth/cloud_search.query'])

    delegated_credentials = credentials.with_subject(user_email)

    return build("cloudsearch", "v1", credentials=delegated_credentials)