La API de Cloud Search Query requiere que las llamadas a la API estén autorizadas con OAuth credenciales que pertenezcan a un usuario con licencia de tu dominio. De forma predeterminada, el Service de servicio, que se usan para acceder a las APIs de indexación y configuración, no pueden Pueden usarse para llamadas a la API de consulta porque no son usuarios del dominio con Cloud Search o licencias de Google Workspace. Si deseas usar una cuenta de servicio cuando autentica las llamadas a la API de consulta, un administrador de dominio puede otorgar a la cuenta acceso de todo el dominio a los datos del usuario, lo que se conoce como delegación de autoridad de todo el dominio. Una cuenta de servicio con cuentas de servicio puede suplantar la identidad de cualquier usuario, incluidos los que tienen acceso a Cloud Search.
Crea la cuenta de servicio y las credenciales
Si aún no tienes credenciales de cuenta de servicio, consulta Crea credenciales de cuenta de servicio.
Delega autoridad en todo el dominio a tu cuenta de servicio
Para acceder a los datos del usuario en un dominio de Google Workspace, la cuenta de servicio que que creaste, debe tener acceso de un administrador avanzado del dominio. Para obtener más información sobre la delegación de todo el dominio, consulta Controla el acceso a la API de Google Workspace con la delegación de todo el dominio.
Sigue estos pasos para delegar autoridad en todo el dominio a una cuenta de servicio:
- Desde la Consola del administrador de tu dominio, ve a Menú principal > Seguridad > Control de acceso y datos > Controles de API.
En el panel Delegación de todo el dominio, selecciona Administrar todo el dominio. Delegación.
Haz clic en Add new (Agregar nuevo).
En el campo ID de cliente, ingresa el ID de cliente que obtuviste en el la creación de cuentas de servicio.
En el campo Alcances de OAuth, ingresa una lista delimitada por comas de los alcances. necesarios para tu aplicación. Cómo usar el alcance
https://www.googleapis.com/auth/cloud_search.query
para aplicaciones de búsqueda con la API de consulta.Haz clic en Autorizar.
Ahora, tu cuenta de servicio tiene acceso a todo el dominio a la API de Cloud Search Query y puede suplantar a cualquier usuario del dominio en este alcance. Estás listo para crear una instancia de un objeto de servicio autorizado de la API de Cloud Search en nombre de tu usuarios del dominio.
Crea una instancia de un objeto de servicio de la API de Cloud Search
Esta sección muestra cómo crear una instancia de un objeto de servicio de la API de Cloud Search y, luego, autorizarlo para realizar solicitudes a la API con OAuth 2.0 y la capa de protección para delegar las credenciales de todo el dominio de Google Workspace. Los ejemplos leer la información de la cuenta de servicio desde el archivo de claves privadas con 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)