Przekazywanie uprawnień w całej domenie Google Workspace

Interfejs Google Cloud Search Query API wymaga, aby wywołania były autoryzowane przez licencjonowanego użytkownika domeny. Konta usługi nie są licencjonowanymi użytkownikami domeny, dlatego domyślnie nie mogą wywoływać interfejsu Query API. Aby umożliwić kontu usługi wykonywanie wywołań interfejsu Query API, administrator domeny może użyć przekazywania uprawnień w całej domenie, aby przyznać kontu usługi dostęp do danych użytkowników w domenie. Konto usługi z przekazanymi uprawnieniami może podszywać się pod dowolnego użytkownika, który ma dostęp do Cloud Search.

Tworzenie konta usługi i danych logowania

Jeśli nie masz danych logowania konta usługi, przeczytaj artykuł 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, superadministrator domeny musi przyznać dostęp do Twojego konta usługi. Więcej informacji znajdziesz w artykule zobacz Kontrolowanie dostępu do interfejsów Google Workspace API przy użyciu przekazywania dostępu w całej domenie.

Aby przekazać kontu usługi uprawnienia do całej domeny:

  1. 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.
  2. W panelu Przekazywanie dostępu w całej domenie kliknij Zarządzaj przekazywaniem dostępu w całej domenie.
  3. Kliknij Dodaj domenę.
  4. W polu Identyfikator klienta wpisz identyfikator klienta konta usługi.
  5. W polu Zakresy OAuth wpisz listę wymaganych zakresów rozdzielonych przecinkami. W przypadku aplikacji wyszukiwania użyj https://www.googleapis.com/auth/cloud_search.query.
  6. Kliknij Autoryzuj.

Twoje konto usługi ma teraz dostęp do interfejsu Cloud Search Query API w całej domenie i może podszywać się pod dowolnego użytkownika w Twojej domenie w tym zakresie. Możesz teraz utworzyć instancję autoryzowanego obiektu usługi Cloud Search API w imieniu użytkowników domeny.

Tworzenie instancji obiektu usługi Cloud Search API

W tej sekcji pokazujemy, jak utworzyć instancję i autoryzować obiekt usługi Cloud Search API za pomocą OAuth 2.0 i danych logowania konta usługi. Te przykłady odczytują informacje z pliku JSON z kluczem prywatnym konta usługi.

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.
 *
 * @param userEmail The email of the user to impersonate.
 * @return CloudSearch service object.
 */
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();

  return new CloudSearch.Builder(httpTransport, jsonFactory, creds).build();
}

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 Cloud Search service object.

    Args:
        user_email: The email of the user to impersonate.
    Returns:
        Cloud Search Query API service object.
    """
    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)