Melakukan delegasi otoritas di seluruh domain Google Workspace

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

Membuat akun layanan dan kredensial

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

Mendelegasikan otoritas seluruh domain ke akun layanan Anda

Untuk mengakses data pengguna di domain Google Workspace, akun layanan yang Anda buat perlu diberi akses oleh administrator super untuk domain itu. Untuk informasi selengkapnya tentang delegasi di seluruh domain, lihat Kontrol akses Google Workspace API dengan delegasi seluruh 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 Seluruh Domain Delegasi.

  3. Klik Tambahkan baru.

  4. Pada bidang ID Klien, masukkan ID klien yang diperoleh dari langkah-langkah pembuatan akun layanan di atas.

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

  6. Klik Authorize.

Akun layanan Anda sekarang memiliki akses seluruh domain ke Cloud Search Query API, dan dapat meniru identitas pengguna mana pun dari domain Anda dalam lingkup ini. Anda siap untuk membuat instance objek layanan Cloud Search API yang diberi otorisasi atas nama pengguna domain.

Membuat instance objek layanan Cloud Search API

Bagian ini menunjukkan cara membuat instance objek layanan Cloud Search API kemudian mengizinkannya untuk membuat permintaan API menggunakan OAuth 2.0 dan alamat untuk melakukan delegasi tingkat domain Google Workspace. Contoh 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)