Domainweite Übertragung von Befugnissen in Google Workspace

Für die Cloud Search Query API müssen API-Aufrufe mit OAuth autorisiert werden Anmeldedaten eines lizenzierten Nutzers in Ihrer Domain. Standardmäßig ist der Dienst Konten, die für den Zugriff auf die Indexierungs- und Konfigurations-APIs verwendet werden, werden für Query API-Aufrufe verwendet, da es sich nicht um Domainnutzer mit Cloud Search handelt oder Google Workspace-Lizenzen. Wenn Sie ein Dienstkonto verwenden möchten, Authentifizierung von API-Aufrufen erfolgt, kann ein Domainadministrator der domainweite Zugriff auf Nutzerdaten, domainweite Delegierung von Befugnissen. Ein Dienstkonto mit delegiertem Konto kann die Identität eines beliebigen Nutzers übernehmen, auch als Nutzer mit Zugriff auf Cloud Search.

Dienstkonto und Anmeldedaten erstellen

Wenn Sie noch keine Anmeldedaten für das Dienstkonto haben, finden Sie weitere Informationen unter Erstellen Sie Anmeldedaten für das Dienstkonto.

Domainweite Berechtigungen an Ihr Dienstkonto delegieren

Für den Zugriff auf Nutzerdaten in einer Google Workspace-Domain muss das Dienstkonto, das die Sie erstellt haben, muss ein Super Admin der Domain Zugriff erhalten. Weitere Informationen zur domainweiten Delegierung finden Sie unter Zugriff auf die Google Workspace API mit domainweiter Delegierung verwalten

So delegieren Sie domainweite Berechtigungen an ein Dienstkonto:

  1. Gehen Sie in der Admin-Konsole Ihrer Domain zu Hauptmenü > Sicherheit > Zugriffs- und Datenkontrolle > API-Steuerung:
  2. Wählen Sie im Bereich Domainweite Delegierung die Option Domainweite Delegierung verwalten. Delegierung.

  3. Klicken Sie auf Neu hinzufügen.

  4. Geben Sie in das Feld Client-ID die Client-ID ein, die Sie vom oben beschriebene Schritte zum Erstellen eines Dienstkontos.

  5. Geben Sie im Feld OAuth-Bereiche eine durch Kommas getrennte Liste der Bereiche ein die für Ihre Anwendung erforderlich sind. Umfang verwenden https://www.googleapis.com/auth/cloud_search.query für Suchanwendungen mithilfe der Query API.

  6. Klicken Sie auf Autorisieren.

Ihr Dienstkonto hat jetzt domainweiten Zugriff auf die Cloud Search Query API. und kann in diesem Bereich jeden Nutzer Ihrer Domain imitieren. Sie können jetzt ein autorisiertes Cloud Search API-Dienstobjekt im Namen Ihres der Nutzer der Domain.

Cloud Search API-Dienstobjekt instanziieren

In diesem Abschnitt erfahren Sie, wie Sie ein Cloud Search API-Dienstobjekt instanziieren autorisieren, API-Anfragen mit OAuth 2.0 und der Methode Anmeldedaten, um eine domainweite Google Workspace-Delegierung auszuführen. Beispiele Die Informationen des Dienstkontos aus der privaten Schlüsseldatei im JSON-Format lesen.

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)