Delegare l'autorità a livello di dominio in Google Workspace

L'API Cloud Search Query richiede che le chiamate API siano autorizzate utilizzando le credenziali OAuth appartenenti a un utente con licenza nel tuo dominio. Per impostazione predefinita, gli account di servizio, utilizzati per accedere alle API di indicizzazione e configurazione, non possono essere utilizzati per le chiamate API di query perché non sono utenti di dominio con licenze Cloud Search o Google Workspace. Se vuoi utilizzare un account di servizio durante l'autenticazione delle chiamate API di query, un amministratore di dominio può concedere all'account l'accesso a livello di dominio ai dati utente. Questa operazione è nota come delegazione dell'autorità a livello di dominio. Un service account con autorità delegata può rappresentare qualsiasi utente, inclusi quelli con accesso a Cloud Search.

Crea il service account e le credenziali

Se non hai ancora le credenziali del service account, consulta Creare le credenziali del service account.

Delega l'autorità a livello di dominio al tuo service account

Per accedere ai dati utente su un dominio Google Workspace, l'accesso deve essere concesso al service account che hai creato da un super amministratore per il dominio. Per saperne di più sulla delega a livello di dominio, vedi Controllare l'accesso all'API Google Workspace con la delega a livello di dominio.

Per delegare l'autorità a livello di dominio a un service account:

  1. Nella Console di amministrazione del tuo dominio, vai a Menu principale > Sicurezza > Accesso e controllo dei dati > Controlli API.
  2. Nel riquadro Delega a livello di dominio, seleziona Gestisci delega a livello di dominio.

  3. Fai clic su Aggiungi nuova.

  4. Nel campo ID client, inserisci l'ID client ottenuto dai passaggi di creazione dell'account di servizio riportati sopra.

  5. Nel campo Ambiti OAuth, inserisci un elenco delimitato da virgole degli ambiti richiesti per la tua applicazione. Utilizza l'ambito https://www.googleapis.com/auth/cloud_search.query per le applicazioni di ricerca utilizzando l'API Query.

  6. Fai clic su Autorizza.

Il tuo service account ora ha accesso a livello di dominio all'API Cloud Search Query e può rappresentare qualsiasi utente del tuo dominio in questo ambito. Ora puoi creare un oggetto di servizio API Cloud Search autorizzato per conto degli utenti del tuo dominio.

Crea un'istanza di un oggetto servizio API Cloud Search

Questa sezione mostra come creare un'istanza di un oggetto servizio API Cloud Search e poi autorizzarlo a effettuare richieste API utilizzando OAuth 2.0 e le credenziali del tuo service account per eseguire la delega a livello di dominio di Google Workspace. Gli esempi leggono le informazioni dell'account di servizio dal file della chiave privata in formato 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)