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)