إجراء تفويض على مستوى نطاق Google Workspace

تتطلّب واجهة برمجة التطبيقات Google Cloud Search Query API أن يوافق مستخدم نطاق مرخَّص على الطلبات. بما أنّ حسابات الخدمة ليست مستخدمي نطاق مرخّصين، لا يمكنها استدعاء Query API تلقائيًا. لتمكين حساب خدمة من إجراء طلبات إلى Query API، يمكن لمشرف النطاق استخدام تفويض المرجع على مستوى النطاق لمنح حساب الخدمة إذن الوصول إلى بيانات المستخدمين في نطاقك. يمكن لحساب خدمة لديه سلطة مفوَّضة انتحال هوية أي مستخدم لديه إذن الوصول إلى Cloud Search.

إنشاء حساب الخدمة وبيانات الاعتماد

إذا لم تكن لديك بيانات اعتماد حساب الخدمة، اطّلِع على إنشاء بيانات اعتماد حساب الخدمة.

تفويض حساب الخدمة على مستوى النطاق

للوصول إلى بيانات المستخدمين على نطاق Google Workspace، يجب أن يمنح مشرف متميّز للنطاق إذن الوصول إلى حساب الخدمة. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة التحكّم في الوصول إلى واجهة برمجة التطبيقات في Google Workspace من خلال التفويض على مستوى النطاق.

لتفويض التفويض على مستوى النطاق إلى حساب خدمة، اتّبِع الخطوات التالية:

  1. في وحدة تحكّم المشرف الخاصة بنطاقك، انتقِل إلى القائمة الرئيسية > الأمان > التحكّم في البيانات والوصول > عناصر التحكّم في واجهة برمجة التطبيقات.
  2. في لوحة التفويض على مستوى النطاق، انقر على إدارة التفويض على مستوى النطاق.
  3. انقر على إضافة نطاق جديد.
  4. في حقل معرّف العميل، أدخِل معرّف العميل لحساب الخدمة.
  5. في حقل نطاقات OAuth، أدخِل قائمة قيم مفصولة بفاصلة بالنطاقات المطلوبة. استخدِم https://www.googleapis.com/auth/cloud_search.query لتطبيقات البحث.
  6. انقر على تفويض.

يملك حساب الخدمة الآن إذن الوصول على مستوى النطاق إلى 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)