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