Für Aufrufe der Google Cloud Search Query API muss ein lizenzierter Domainnutzer die Autorisierung vornehmen. Da Dienstkonten keine lizenzierten Domainnutzer sind, können sie die Query API standardmäßig nicht aufrufen. Damit ein Dienstkonto Query API-Aufrufe ausführen kann, kann ein Domainadministrator domainweite Befugnisse delegieren, um dem Dienstkonto Zugriff auf die Nutzerdaten Ihrer Domain zu gewähren. Ein Dienstkonto mit delegierten Befugnissen kann die Identität jedes Nutzers übernehmen, der Zugriff auf Cloud Search hat.
Dienstkonto und Anmeldedaten erstellen
Wenn Sie keine Anmeldedaten für ein Dienstkonto haben, lesen Sie den Hilfeartikel Anmeldedaten für ein Dienstkonto erstellen.
Domainweite Befugnisse an Ihr Dienstkonto delegieren
Um auf Nutzerdaten in einer Google Workspace-Domain zuzugreifen, muss ein Superadministrator der Domain Ihrem Dienstkonto Zugriff gewähren. Weitere Informationen finden Sie unter siehe Zugriff auf die Google Workspace API mit domainweiter Delegierung verwalten.
So delegieren Sie domainweite Befugnisse an ein Dienstkonto:
- Rufen Sie in der Admin-Konsole Ihrer Domain das Hauptmenü > Sicherheit > Zugriffs- und Datenkontrolle > API-Steuerung auf.
- Wählen Sie im Bereich Domainweite Delegierung die Option Domainweite Delegierung verwalten aus.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Client-ID die Client-ID für Ihr Dienstkonto ein.
- Geben Sie im Feld OAuth-Bereiche eine durch Kommas getrennte Liste der erforderlichen Bereiche ein. Verwenden Sie für Suchanwendungen
https://www.googleapis.com/auth/cloud_search.query. - Klicken Sie auf Autorisieren.
Ihr Dienstkonto hat jetzt domainweiten Zugriff auf die Cloud Search Query API und kann in diesem Bereich die Identität jedes Nutzers in Ihrer Domain übernehmen. Sie können jetzt ein autorisiertes Cloud Search API-Dienstobjekt im Namen der Nutzer Ihrer Domain instanziieren.
Cloud Search API-Dienstobjekt instanziieren
In diesem Abschnitt wird beschrieben, wie Sie ein Cloud Search API-Dienstobjekt mit OAuth 2.0 und Ihren Dienstkonto-Anmeldedaten instanziieren und autorisieren. In diesen Beispielen werden Informationen aus der JSON-Datei mit dem privaten Schlüssel des Dienstkontos gelesen.
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)