Interfejs Cloud Search Query API wymaga autoryzowania wywołań interfejsu API przy użyciu danych logowania OAuth należących do licencjonowanego użytkownika w Twojej domenie. Domyślnie kont usługi, które służą do uzyskiwania dostępu do interfejsów API indeksowania i konfigurowania, nie można używać w wywołaniach interfejsu API zapytań, ponieważ nie są to użytkownicy domeny z licencjami na Cloud Search ani Google Workspace. Jeśli do uwierzytelniania wywołań interfejsu API zapytań chcesz używać konta usługi, administrator domeny może przyznać kontu dostęp do danych użytkowników w całej domenie. Jest to tzw. przekazywanie uprawnień w całej domenie. Konto usługi z przekazanymi uprawnieniami może przyjmować tożsamość 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 do konta usługi, zapoznaj się z artykułem Tworzenie danych logowania do konta usługi.
Przekazywanie uprawnień w całej domenie do konta usługi
Jeśli chcesz uzyskać dostęp do danych użytkownika w domenie Google Workspace, utworzone przez Ciebie konto usługi musi mieć uprawnienia dostępu superadministratora tej domeny. Więcej informacji o przekazywaniu dostępu w całej domenie znajdziesz w artykule Kontrola nad dostępem do interfejsu Google Workspace API przy użyciu przekazywania dostępu w całej domenie.
Aby przekazać uprawnienia do całej domeny kontu usługi:
- W konsoli administracyjnej domeny kliknij Menu główne > Bezpieczeństwo > Dostęp i kontrola nad danymi > Dostęp do interfejsów API.
W panelu Przekazywanie dostępu w całej domenie kliknij Zarządzaj przekazywaniem dostępu w całej domenie.
Kliknij Dodaj nowy.
W polu Identyfikator klienta wpisz identyfikator klienta uzyskany w powyższych krokach tworzenia konta usługi.
W polu Zakresy protokołu OAuth wpisz rozdzieloną przecinkami listę zakresów wymaganych przez aplikację. Używaj zakresu
https://www.googleapis.com/auth/cloud_search.query
w przypadku wyszukiwarek korzystających z interfejsu Query API.Kliknij Autoryzuj.
Twoje konto usługi ma teraz dostęp do interfejsu Cloud Search Query API w całej domenie i może odgrywać rolę dowolnego użytkownika domeny w tym zakresie. Możesz teraz zainicjować autoryzowany obiekt usługi Cloud Search API w imieniu użytkowników swojej domeny.
Tworzenie instancji obiektu usługi Cloud Search API
W tej sekcji pokazujemy, jak utworzyć instancję usługi Cloud Search API, a następnie autoryzować go do wysyłania żądań do interfejsu API przy użyciu protokołu OAuth 2.0 i danych logowania konta usługi na potrzeby przekazywania dostępu w całej domenie Google Workspace. Przykłady odczytują informacje o koncie usługi 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)