API جستجوی گوگل کلود (Google Cloud Search Query API) نیاز دارد که فراخوانیها توسط یک کاربر دامنه دارای مجوز مجاز باشند. از آنجا که حسابهای سرویس، کاربران دامنه دارای مجوز نیستند، نمیتوانند به طور پیشفرض API جستجوی گوگل را فراخوانی کنند. برای فعال کردن یک حساب سرویس برای برقراری فراخوانیهای API جستجوی گوگل، مدیر دامنه میتواند از تفویض اختیار در سطح دامنه برای اعطای دسترسی حساب سرویس به دادههای کاربر دامنه شما استفاده کند. یک حساب سرویس با تفویض اختیار میتواند خود را به جای هر کاربری که به جستجوی ابری دسترسی دارد، جا بزند.
ایجاد حساب کاربری سرویس و اعتبارنامهها
اگر اعتبارنامه حساب سرویس ندارید، به ایجاد اعتبارنامه حساب سرویس مراجعه کنید.
اختیارات کل دامنه را به حساب سرویس خود واگذار کنید
برای دسترسی به دادههای کاربر در یک دامنه Google Workspace، یک مدیر ارشد دامنه باید به حساب سرویس شما دسترسی بدهد. برای اطلاعات بیشتر، به بخش «کنترل دسترسی API Google Workspace با واگذاری اختیارات در سطح دامنه» مراجعه کنید.
برای واگذاری اختیارات در سطح دامنه به یک حساب کاربری سرویس:
- در کنسول مدیریت دامنه خود، به اصلی > امنیت > کنترل دسترسی و دادهها > کنترلهای API بروید.
- در پنل واگذاری اختیارات در سطح دامنه ، گزینه مدیریت واگذاری اختیارات در سطح دامنه را انتخاب کنید.
- روی افزودن جدید کلیک کنید.
- در قسمت شناسه مشتری ، شناسه مشتری مربوط به حساب سرویس خود را وارد کنید.
- در فیلد OAuth Scopes ، فهرستی از Scopesهای مورد نیاز را که با کاما از هم جدا شدهاند، وارد کنید. برای برنامههای جستجو
https://www.googleapis.com/auth/cloud_search.queryاستفاده کنید. - روی تأیید کلیک کنید.
حساب کاربری سرویس شما اکنون به API جستجوی ابری (Cloud Search Query API) در سطح دامنه دسترسی دارد و میتواند هویت هر کاربری را در دامنه شما در این محدوده جعل کند. اکنون میتوانید یک شیء سرویس 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();
}
پایتون
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)