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

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

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

إذا لم تكن لديك بيانات اعتماد حساب الخدمة، يُرجى الرجوع إلى إنشاء بيانات اعتماد حساب الخدمة.

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

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

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

  1. من وحدة تحكّم المشرف الخاصة بنطاقك، انتقِل إلى القائمة الرئيسية > الأمان > التحكّم في الوصول والبيانات > عناصر تحكّم واجهة برمجة التطبيقات.
  2. في لوحة التفويض على مستوى النطاق، انقر على إدارة التفويض على مستوى النطاق.

  3. انقر على إضافة نطاق جديد.

  4. في حقل معرّف العميل، أدخِل معرّف العميل الذي حصلت عليه من خطوات إنشاء حساب الخدمة الموضّحة أعلاه.

  5. في حقل نطاقات OAuth، أدخِل قائمة بالنطاقات مفصولة بفواصل المطلوبة لتطبيقك. استخدِم النطاق https://www.googleapis.com/auth/cloud_search.query لتطبيقات البحث باستخدام Query API.

  6. انقر على تفويض.

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

إنشاء مثيل لكائن خدمة Cloud Search API

يوضّح هذا القسم كيفية إنشاء عنصر خدمة Cloud Search 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)