تتطلّب واجهة برمجة التطبيقات Google Cloud Search Query API أن تكون المكالمات مأذونًا بها من قِبل مستخدم نطاق مرخَّص. بما أنّ حسابات الخدمة ليست مستخدمي نطاق مرخَّصين، لا يمكنها إجراء مكالمات إلى Query API تلقائيًا. للسماح لحساب خدمة بإجراء مكالمات إلى Query API، يمكن لمشرف النطاق استخدام تفويض السلطة على مستوى النطاق لمنح حساب الخدمة إذن الوصول إلى بيانات المستخدم في نطاقك. يمكن لحساب الخدمة الذي تم تفويضه انتحال صفة أي مستخدم لديه إذن الوصول إلى Cloud Search.
إنشاء حساب الخدمة وبيانات الاعتماد
إذا لم تكن لديك بيانات اعتماد حساب خدمة، يُرجى الاطّلاع على مقالة إنشاء بيانات اعتماد حساب خدمة.
تفويض السلطة على مستوى النطاق إلى حساب الخدمة
للوصول إلى بيانات المستخدم في نطاق Google Workspace، يجب أن يمنح مشرف النطاق المميّز حساب الخدمة إذن الوصول. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة التحكّم في الوصول إلى Google Workspace API من خلال التفويض على مستوى النطاق.
لتفويض السلطة على مستوى النطاق إلى حساب خدمة، يُرجى اتّباع الخطوات التالية:
- في وحدة تحكّم المشرف في نطاقك، انتقِل إلى القائمة الرئيسية > الأمان > التحكّم في البيانات والوصول > عناصر تحكّم واجهة برمجة التطبيقات.
- في لوحة التفويض على مستوى النطاق ، اختَر إدارة التفويض على مستوى النطاق.
- انقر على إضافة نطاق جديد.
- في حقل معرِّف العميل ، أدخِل معرِّف العميل لحساب الخدمة.
- في حقل نطاقات OAuth ، أدخِل قائمة قيم مفصولة بفاصلة بالنطاقات المطلوبة. استخدِم
https://www.googleapis.com/auth/cloud_search.queryلتطبيقات البحث. - انقر على تفويض.
أصبح بإمكان حساب الخدمة الآن الوصول إلى Cloud Search Query API على مستوى النطاق ويمكنه انتحال صفة أي مستخدم في نطاقك ضمن هذا النطاق. يمكنك الآن إنشاء عنصر خدمة Cloud Search API مأذون به نيابةً عن مستخدمي نطاقك.
إنشاء عنصر خدمة Cloud Search API
يوضّح هذا القسم كيفية إنشاء عنصر خدمة Cloud Search API وتفويضه باستخدام OAuth 2.0 وبيانات اعتماد حساب الخدمة. تقرأ هذه الأمثلة المعلومات من ملف المفتاح الخاص بتنسيق JSON لحساب الخدمة.
جافا
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)