כדי להשתמש ב-Cloud Search Query API, נדרש אישור לקריאות API באמצעות פרטי כניסה של OAuth ששייכים למשתמש ברישיון בדומיין שלכם. כברירת מחדל, אי אפשר להשתמש בחשבונות שירות, המשמשים לגישה לממשקי ה-API להוספה לאינדקס ולקביעת הגדרות, לקריאות API של שאילתות, כי הם לא משתמשים בדומיין עם רישיונות ל-Cloud Search או ל-Google Workspace. אם אתם רוצים להשתמש בחשבון שירות כדי לאמת קריאות ל-API של שאילתות, אדמין הדומיין יכול להעניק לחשבון גישה ברמת הדומיין לנתוני המשתמשים. התהליך הזה נקרא הענקת גישה ברמת הדומיין. חשבון שירות עם הרשאות גישה שהוקצו לו יכול להתחזות לכל משתמש, כולל משתמשים שיש להם גישה לחיפוש ב-Cloud.
יצירת חשבון השירות ופרטי הכניסה
אם עדיין אין לכם פרטי כניסה לחשבון שירות, תוכלו לעיין במאמר יצירת פרטי כניסה לחשבון שירות.
הענקת הרשאה ברמת הדומיין לחשבון השירות
כדי לגשת לנתוני משתמשים בדומיין של Google Workspace, סופר-אדמין בדומיין צריך להעניק הרשאת גישה לחשבון השירות שיצרתם. מידע נוסף על הענקת גישה ברמת הדומיין זמין במאמר שליטה בגישה ל-Google Workspace API באמצעות הענקת גישה ברמת הדומיין.
כדי להעניק לחשבון שירות הרשאה ברמת הדומיין:
- במסוף Admin של הדומיין, עוברים אל תפריט ראשי > אבטחה > שליטה בגישה ובנתונים > אמצעי בקרה ל-API.
בחלונית הענקת גישה ברמת הדומיין, בוחרים באפשרות ניהול של הענקת גישה ברמת הדומיין.
לוחצים על הוספת חדש.
בשדה Client ID, מזינים את מספר הלקוח שהתקבל מהשלבים ליצירת חשבון השירות שלמעלה.
בשדה OAuth Scopes, מזינים רשימה של ההיקפים הנדרשים לאפליקציה, מופרדים בפסיקים. משתמשים בהיקף
https://www.googleapis.com/auth/cloud_search.query
לאפליקציות חיפוש שמשתמשות ב-Query API.לוחצים על Authorize.
עכשיו לחשבון השירות יש גישה ברמת הדומיין ל-Cloud Search Query API, והוא יכול להתחזות לכל משתמש בדומיין ברמת ההיקף הזו. עכשיו אתם מוכנים ליצור מופע של אובייקט שירות מורשה של Cloud Search API בשם המשתמשים של הדומיין.
יצירת אובייקט שירות של Cloud Search API
בקטע הזה מוסבר איך ליצור מופע של אובייקט שירות של Cloud Search API, ואז להעניק לו הרשאה לשלוח בקשות API באמצעות OAuth 2.0 ופרטי הכניסה של חשבון השירות, כדי לבצע הענקת גישה ברמת הדומיין ב-Google Workspace. בדוגמאות קוראים את המידע של חשבון השירות מקובץ המפתח הפרטי בפורמט 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)