تفویض اختیار در سراسر دامنه Google Workspace را انجام دهید

رابط برنامه‌نویسی کاربردی جستجوی ابری (Cloud Search Query API) مستلزم آن است که فراخوانی‌های API با استفاده از اعتبارنامه‌های OAuth متعلق به یک کاربر دارای مجوز در دامنه شما مجاز شوند. به طور پیش‌فرض، حساب‌های سرویس، که برای دسترسی به APIهای نمایه‌سازی و پیکربندی استفاده می‌شوند، نمی‌توانند برای فراخوانی‌های API پرس‌وجو استفاده شوند زیرا آنها کاربران دامنه با مجوزهای جستجوی ابری یا Google Workspace نیستند. اگر می‌خواهید هنگام تأیید اعتبار فراخوانی‌های API پرس‌وجو از یک حساب سرویس استفاده کنید، یک مدیر دامنه می‌تواند به حساب دسترسی در سطح دامنه به داده‌های کاربر را اعطا کند - این به عنوان تفویض اختیار در سطح دامنه شناخته می‌شود. یک حساب سرویس با اختیار تفویض شده می‌تواند هر کاربری، از جمله کاربرانی که به جستجوی ابری دسترسی دارند، را جعل هویت کند.

ایجاد حساب کاربری سرویس و اعتبارنامه‌ها

اگر هنوز اعتبارنامه حساب سرویس ندارید، به ایجاد اعتبارنامه حساب سرویس مراجعه کنید.

اختیارات کل دامنه را به حساب سرویس خود واگذار کنید

برای دسترسی به داده‌های کاربر در یک دامنه Google Workspace، حساب سرویسی که ایجاد کرده‌اید باید توسط یک مدیر ارشد دامنه به آن دسترسی داده شود. برای اطلاعات بیشتر در مورد واگذاری اختیارات در سطح دامنه، به بخش «کنترل دسترسی API Google Workspace با واگذاری اختیارات در سطح دامنه» مراجعه کنید.

برای واگذاری اختیارات در سطح دامنه به یک حساب کاربری سرویس:

  1. از کنسول مدیریت دامنه خود، به اصلی > امنیت > کنترل دسترسی و داده‌ها > کنترل‌های API بروید.
  2. در پنل واگذاری اختیارات در سطح دامنه ، گزینه مدیریت واگذاری اختیارات در سطح دامنه را انتخاب کنید.

  3. روی افزودن جدید کلیک کنید.

  4. در فیلد شناسه مشتری ، شناسه مشتری که از مراحل ایجاد حساب سرویس در بالا به دست آمده است را وارد کنید.

  5. در فیلد OAuth Scopes ، فهرستی از scopeهای مورد نیاز برای برنامه خود را که با کاما از هم جدا شده‌اند، وارد کنید. برای جستجوی برنامه‌ها با استفاده از Query API، از scope https://www.googleapis.com/auth/cloud_search.query استفاده کنید.

  6. روی تأیید کلیک کنید.

حساب کاربری سرویس شما اکنون به API جستجوی ابری (Cloud Search Query API) در سطح دامنه دسترسی دارد و می‌تواند هویت هر کاربر دامنه شما را در این حوزه جعل کند. شما آماده‌اید تا یک شیء سرویس API جستجوی ابری مجاز را به نمایندگی از کاربران دامنه خود نمونه‌سازی کنید.

نمونه‌سازی یک شیء سرویس Cloud Search API

این بخش نحوه نمونه‌سازی یک شیء سرویس Cloud Search API و سپس مجاز کردن آن برای ارسال درخواست‌های API با استفاده از OAuth 2.0 و اعتبارنامه‌های حساب سرویس شما برای انجام واگذاری دامنه در سطح Google Workspace را نشان می‌دهد. مثال‌ها اطلاعات حساب سرویس را از فایل کلید خصوصی با فرمت 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 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;
}

پایتون

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)