Interfejs Cloud Search Query API wymaga, aby wywołania API były autoryzowane za pomocą danych logowania OAuth należących do licencjonowanego użytkownika w Twojej domenie. Domyślnie kont usługi, które są używane do uzyskiwania dostępu do interfejsów API indeksowania i konfiguracji, nie mogą być używane do wywoływania interfejsu API zapytań, ponieważ nie są użytkownikami domeny z licencjami Cloud Search ani Google Workspace. Jeśli chcesz używać konta usługi podczas uwierzytelniania wywołań interfejsu API zapytań, administrator domeny może przyznać temu kontu dostęp do danych użytkowników w całej domenie. Jest to tzw. przekazywanie uprawnień w obrębie całej domeny. Konto usługi z delegowanymi uprawnieniami może podszywać się pod dowolnego użytkownika, w tym użytkowników z dostępem do Cloud Search.
Tworzenie konta usługi i danych logowania
Jeśli nie masz jeszcze danych logowania konta usługi, zapoznaj się z artykułem Tworzenie danych logowania konta usługi.
Przekazywanie kontu usługi uprawnień do całej domeny
Aby uzyskać dostęp do danych użytkowników w domenie Google Workspace, konto usługi, które zostało utworzone, musi mieć przyznany dostęp przez superadministratora domeny. Więcej informacji o przekazywaniu dostępu w całej domenie znajdziesz w artykule Kontrola dostępu do interfejsów API Google Workspace przy użyciu przekazywania dostępu w całej domenie.
Aby przekazać kontu usługi uprawnienia do całej domeny:
- W konsoli administracyjnej domeny otwórz Menu główne > Bezpieczeństwo > Dostęp do danych i kontrola nad nimi > Dostęp do interfejsów API.
- W okienku Przekazywanie dostępu w całej domenie kliknij Zarządzaj przekazywaniem dostępu w całej domenie. 
- Kliknij Dodaj domenę. 
- W polu Identyfikator klienta wpisz identyfikator klienta uzyskany w krokach tworzenia konta usługi powyżej. 
- W polu Zakresy OAuth wpisz listę zakresów rozdzielonych przecinkami, które są wymagane w Twojej aplikacji. Użyj zakresu - https://www.googleapis.com/auth/cloud_search.queryw przypadku aplikacji do wyszukiwania korzystających z interfejsu Query API.
- Kliknij Autoryzuj. 
Konto usługi ma teraz dostęp do interfejsu Cloud Search Query API w całej domenie i może przyjmować tożsamość dowolnego użytkownika w domenie w tym zakresie. Możesz teraz utworzyć instancję autoryzowanego obiektu usługi Cloud Search API w imieniu użytkowników domeny.
Utwórz instancję obiektu usługi Cloud Search API
W tej sekcji pokazujemy, jak utworzyć instancję obiektu usługi Cloud Search API, a następnie autoryzować ją do wysyłania żądań API za pomocą OAuth 2.0 i danych logowania konta usługi w celu wykonania delegowania w całej domenie Google Workspace. W przykładach informacje o koncie usługi są odczytywane z pliku klucza prywatnego w formacie 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)