Google Cloud Search Query API को कॉल करने के लिए, लाइसेंस वाले डोमेन के किसी उपयोगकर्ता की अनुमति ज़रूरी होती है. सेवा खाते, लाइसेंस वाले डोमेन के उपयोगकर्ता नहीं होते. इसलिए, वे डिफ़ॉल्ट रूप से Query API को कॉल नहीं कर सकते. किसी सेवा खाते को Query API कॉल करने की अनुमति देने के लिए, डोमेन का एडमिन पूरे डोमेन के लिए अनुमति देने की सुविधा का इस्तेमाल करके, सेवा खाते को आपके डोमेन के उपयोगकर्ता डेटा का ऐक्सेस दे सकता है. पूरे डोमेन के लिए अनुमति पाने वाला सेवा खाता, Cloud Search का ऐक्सेस रखने वाले किसी भी उपयोगकर्ता के नाम पर काम कर सकता है.
सेवा खाता और क्रेडेंशियल बनाना
अगर आपके पास सेवा खाते के क्रेडेंशियल नहीं हैं, तो सेवा खाते के क्रेडेंशियल बनाना लेख पढ़ें.
अपने सेवा खाते को पूरे डोमेन के लिए अनुमति देना
Google Workspace के किसी डोमेन पर उपयोगकर्ता डेटा ऐक्सेस करने के लिए, डोमेन के सुपर एडमिन को आपके सेवा खाते को ऐक्सेस देना होगा. ज़्यादा जानकारी के लिए, देखें पूरे डोमेन के लिए अनुमति देने की सुविधा की मदद से, Google Workspace API के ऐक्सेस को कंट्रोल करना.
किसी सेवा खाते को पूरे डोमेन के लिए अनुमति देने के लिए:
- अपने डोमेन के Admin console में, मुख्य मेन्यू > सुरक्षा > ऐक्सेस और डेटा कंट्रोल > एपीआई कंट्रोल पर जाएं.
- पूरे डोमेन के लिए अनुमति देने की सुविधा पैनल में, पूरे डोमेन के लिए अनुमति देने की सुविधा मैनेज करें को चुनें.
- नया जोड़ें पर क्लिक करें.
- क्लाइंट आईडी फ़ील्ड में, अपने सेवा खाते का क्लाइंट आईडी डालें.
- OAuth स्कोप फ़ील्ड में, ज़रूरी स्कोप की कॉमा लगाकर अलग की गई लिस्ट डालें. सर्च ऐप्लिकेशन के लिए,
https://www.googleapis.com/auth/cloud_search.queryका इस्तेमाल करें. - अनुमति दें पर क्लिक करें.
अब आपके सेवा खाते के पास, Cloud Search Query API का ऐक्सेस पूरे डोमेन के लिए है. साथ ही, यह इस स्कोप में आपके डोमेन के किसी भी उपयोगकर्ता के नाम पर काम कर सकता है. अब आपके पास, अपने डोमेन के उपयोगकर्ताओं की ओर से, अनुमति वाले Cloud Search API सेवा ऑब्जेक्ट को इंस्टैंशिएट करने का विकल्प है.
Cloud Search API सेवा ऑब्जेक्ट को इंस्टैंशिएट करना
इस सेक्शन में, OAuth 2.0 और अपने सेवा खाते के क्रेडेंशियल का इस्तेमाल करके, Cloud Search API सेवा ऑब्जेक्ट को इंस्टैंशिएट और अनुमति देने का तरीका बताया गया है. इन उदाहरणों में, सेवा खाते की 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.
*
* @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();
}
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 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)