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

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

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

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

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

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

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

  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)