इस गाइड में बताया गया है कि Apps Script में एपीआई को कॉल करते समय, सेवा खाते से पुष्टि कैसे करें.
सेवा खाता एक खास तरह का खाता होता है, जिसका इस्तेमाल कोई ऐप्लिकेशन करता है. यह खाता किसी व्यक्ति का नहीं होता. सेवा खाते का इस्तेमाल, रोबोट खाते से डेटा ऐक्सेस करने या कार्रवाइयां करने के लिए किया जा सकता है. इसके अलावा, इसका इस्तेमाल Google Workspace या Cloud Identity के उपयोगकर्ताओं की ओर से डेटा ऐक्सेस करने के लिए भी किया जा सकता है. ज़्यादा जानकारी के लिए, सेवा खातों के बारे में जानकारी लेख पढ़ें.Google Workspace API के लिए पुष्टि करने की प्रोसेस के बारे में खास जानकारी पाने के लिए, ऐक्सेस क्रेडेंशियल बनाना लेख पढ़ें.
Apps Script में सेवा खातों का इस्तेमाल कब करना चाहिए
डिफ़ॉल्ट रूप से, Apps Script, स्क्रिप्ट का इस्तेमाल करने वाले व्यक्ति के क्रेडेंशियल का इस्तेमाल करके एपीआई को कॉल करता है. अगर Google APIs को कॉल करने के लिए UrlFetchApp का इस्तेमाल किया जा रहा है, तो ScriptApp.getOAuthToken को कॉल करके, स्क्रिप्ट का इस्तेमाल करने वाले व्यक्ति के लिए ऐक्सेस टोकन पाया जा सकता है.
हालांकि, कुछ मामलों में सेवा खातों का इस्तेमाल करने के कई फ़ायदे हैं.ScriptApp.getOAuthToken इन वजहों से, सेवा खाते की पुष्टि करने की सुविधा का इस्तेमाल करें:
- Google Cloud API और सेवाओं के साथ बेहतर परफ़ॉर्मेंस: कई Google Cloud API, सेवा खाते की पुष्टि करने के लिए डिज़ाइन किए गए हैं. सेवा खाते, ज़्यादातर एपीआई के साथ इंटरैक्ट करने का ज़्यादा इंटिग्रेटेड, भरोसेमंद, और सुरक्षित तरीका भी उपलब्ध करा सकते हैं.
- अनुमतियों को अलग करना: सेवा खातों के पास अपनी अनुमतियां होती हैं. ये अनुमतियां, किसी भी उपयोगकर्ता से अलग होती हैं. प्रोजेक्ट को अन्य उपयोगकर्ताओं के साथ शेयर करने पर, पुष्टि करने का तरीका
ScriptApp.getOAuthTokenकाम नहीं कर सकता. सेवा खातों का इस्तेमाल करके, स्क्रिप्ट शेयर करें और उन्हें Google Workspace ऐड-ऑन के तौर पर पब्लिश करें. - ऑटोमेट की गई स्क्रिप्ट और लंबे समय तक चलने वाले टास्क: सेवा खातों की मदद से, ऑटोमेट की गई स्क्रिप्ट, बैच प्रोसेस या बैकग्राउंड टास्क चलाए जा सकते हैं. इसके लिए, उपयोगकर्ता के इनपुट की ज़रूरत नहीं होती.
- बेहतर सुरक्षा और कम से कम अधिकार का सिद्धांत: सेवा खातों को खास अनुमतियां दें, ताकि वे सिर्फ़ उन संसाधनों को ऐक्सेस कर सकें जिनकी उन्हें ज़रूरत है. यह कम से कम अधिकारों के सिद्धांत के मुताबिक काम करता है. इससे सुरक्षा से जुड़े जोखिम कम हो जाते हैं.
ScriptApp.getOAuthTokenका इस्तेमाल करने पर, स्क्रिप्ट को अक्सर उपयोगकर्ता की सभी अनुमतियां मिल जाती हैं. हालांकि, ये अनुमतियां बहुत ज़्यादा हो सकती हैं. - ऐक्सेस मैनेजमेंट की सुविधा: सेवा खातों को मैनेज करने के लिए, Google Cloud के Identity and Access Management (IAM) का इस्तेमाल किया जाता है. IAM की मदद से, Google Workspace संगठन, Apps Script प्रोजेक्ट में पुष्टि की गई सेवाओं का ऐक्सेस मैनेज कर सकते हैं.
ज़रूरी शर्तें
- एक Google Cloud प्रोजेक्ट.
- अपने Cloud प्रोजेक्ट में, सेवा खाते के क्रेडेंशियल का इस्तेमाल करके पुष्टि करने के लिए, कोई भी एपीआई चालू करें.
- सेवा खातों को भूमिकाएं असाइन करने के लिए, आपके पास सुपर एडमिन के अधिकार होने चाहिए.
सेवा खाता बनाना
अपने क्लाउड प्रोजेक्ट में, एक सेवा खाता बनाएं:
Google Cloud कंसोल
- Google Cloud Console में, मेन्यू > आईएएम और एडमिन > सेवा खाते पर जाएं.
- सेवा खाता बनाएं पर क्लिक करें.
- सेवा खाते की जानकारी भरें. इसके बाद, बनाएं और जारी रखें पर क्लिक करें.
- ज़रूरी नहीं: अपने सेवा खाते को भूमिकाएं असाइन करें, ताकि उसे आपके Google Cloud प्रोजेक्ट के संसाधनों का ऐक्सेस मिल सके. ज़्यादा जानकारी के लिए, संसाधनों का ऐक्सेस देना, उसमें बदलाव करना, और उसे रद्द करना लेख पढ़ें.
- जारी रखें पर क्लिक करें.
- उन उपयोगकर्ताओं या ग्रुप के नाम डालें जिनके पास इस सेवा खाते को मैनेज करने और इससे जुड़ी कार्रवाइयां करने का ऐक्सेस है. हालांकि, यह ज़रूरी नहीं है. ज़्यादा जानकारी के लिए, सेवा खाते के डुप्लीकेट को मैनेज करना लेख पढ़ें.
- हो गया पर क्लिक करें. सेवा खाते का ईमेल पता नोट कर लें.
gcloud सीएलआई
- सेवा खाता बनाएं:
gcloud iam service-accounts createSERVICE_ACCOUNT_NAME\ --display-name="SERVICE_ACCOUNT_NAME" - ज़रूरी नहीं: अपने सेवा खाते को भूमिकाएं असाइन करें, ताकि उसे आपके Google Cloud प्रोजेक्ट के संसाधनों का ऐक्सेस मिल सके. ज़्यादा जानकारी के लिए, संसाधनों का ऐक्सेस देना, उसमें बदलाव करना, और उसे रद्द करना लेख पढ़ें.
सेवा खाते को कोई भूमिका असाइन करना
आपको सेवा खाते को पहले से बनी हुई या पसंद के मुताबिक भूमिका असाइन करनी होगी. यह काम सिर्फ़ सुपर एडमिन खाता कर सकता है.
Google Admin console में, मेन्यू > खाता > एडमिन की भूमिकाएं पर जाएं.
एडमिन की भूमिकाएं पर जाएं
उस भूमिका पर कर्सर घुमाएं जिसे आपको असाइन करना है. इसके बाद, एडमिन असाइन करें पर क्लिक करें.
सेवा खाते असाइन करें पर क्लिक करें.
सेवा खाते का ईमेल पता डालें.
जोड़ें > भूमिका असाइन करें पर क्लिक करें.
किसी सेवा खाते के लिए क्रेडेंशियल बनाना
आपको सार्वजनिक/निजी पासकोड के जोड़े के तौर पर क्रेडेंशियल पाने होंगे. इन क्रेडेंशियल का इस्तेमाल, आपका कोड करता है. इससे आपके ऐप्लिकेशन में सेवा खाते की कार्रवाइयों को अनुमति दी जाती है.अपने सेवा खाते के क्रेडेंशियल पाने के लिए:
- Google Cloud Console में, मेन्यू > आईएएम और एडमिन > सेवा खाते पर जाएं.
- अपना सेवा खाता चुनें.
- कुंजियां > कुंजी जोड़ें > नई कुंजी बनाएं पर क्लिक करें.
- JSON को चुनें. इसके बाद, बनाएं पर क्लिक करें.
आपकी नई सार्वजनिक/निजी कुंजी की जोड़ी जनरेट करके आपकी मशीन पर एक नई फ़ाइल के तौर पर डाउनलोड की जाती है. डाउनलोड की गई JSON फ़ाइल को अपनी वर्किंग डायरेक्ट्री में
credentials.jsonके तौर पर सेव करें. यह फ़ाइल, इस कुंजी की सिर्फ़ एक कॉपी है. अपनी कुंजी को सुरक्षित तरीके से सेव करने के बारे में जानकारी के लिए, सेवा खाते की कुंजियों को मैनेज करना लेख पढ़ें. - बंद करें पर क्लिक करें.
क्लाउड प्रोजेक्ट का नंबर कॉपी करें
- Google Cloud console में, मेन्यू > IAM और एडमिन > सेटिंग पर जाएं.
- प्रोजेक्ट नंबर फ़ील्ड में, वैल्यू कॉपी करें.
अपने Apps Script प्रोजेक्ट में सेवा खाते की पुष्टि करने की सुविधा सेट अप करना
इस सेक्शन में, अपने Cloud प्रोजेक्ट से सेवा खाते के क्रेडेंशियल को Apps Script प्रोजेक्ट में जोड़ने का तरीका बताया गया है.
Apps Script में अपना Cloud प्रोजेक्ट सेट करना
कोई प्रोजेक्ट खोलने या बनाने के लिए, Apps Script पर जाएं:
अपने Apps Script प्रोजेक्ट में, प्रोजेक्ट की सेटिंग
पर क्लिक करें.
Google Cloud प्रोजेक्ट में जाकर, प्रोजेक्ट बदलें पर क्लिक करें.
Google Cloud प्रोजेक्ट नंबर में, Cloud प्रोजेक्ट नंबर चिपकाएं.
प्रोजेक्ट सेट करें पर क्लिक करें.
क्रेडेंशियल को स्क्रिप्ट प्रॉपर्टी के तौर पर सेव करना
अपने सेवा खाते के क्रेडेंशियल को सुरक्षित तरीके से सेव करें. इसके लिए, उन्हें Apps Script प्रोजेक्ट की सेटिंग में स्क्रिप्ट प्रॉपर्टी के तौर पर सेव करें:
- अपनी सेवा खाते की JSON फ़ाइल (
credentials.json) का कॉन्टेंट कॉपी करें. यह फ़ाइल आपने पिछले सेक्शन में बनाई थी. - अपने Apps Script प्रोजेक्ट में, प्रोजेक्ट की सेटिंग पर जाएं.
- प्रोजेक्ट सेटिंग पेज पर जाकर, स्क्रिप्ट प्रॉपर्टी पर जाएं. इसके बाद, स्क्रिप्ट प्रॉपर्टी जोड़ें पर क्लिक करें और यह जानकारी डालें:
- प्रॉपर्टी फ़ील्ड में,
SERVICE_ACCOUNT_KEYडालें. - वैल्यू फ़ील्ड में, अपनी JSON कुंजी फ़ाइल का कॉन्टेंट चिपकाएं.
- प्रॉपर्टी फ़ील्ड में,
- स्क्रिप्ट प्रॉपर्टी सेव करें पर क्लिक करें.
OAuth2 लाइब्रेरी जोड़ना
OAuth2 पुष्टि करने के फ़्लो को मैनेज करने के लिए, Apps Script लाइब्रेरी apps-script-oauth2 का इस्तेमाल करें.
अपने Apps Script प्रोजेक्ट में लाइब्रेरी जोड़ने के लिए:
- Apps Script एडिटर में, बाईं ओर लाइब्रेरी के बगल में, लाइब्रेरी जोड़ें पर क्लिक करें.
- स्क्रिप्ट आईडी फ़ील्ड में,
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDFडालें. - खोजें पर क्लिक करें.
- नया वर्शन चुनें. इसके बाद, जोड़ें पर क्लिक करें.
सेवा खाते के क्रेडेंशियल का इस्तेमाल करके एपीआई को कॉल करना
अपने Apps Script प्रोजेक्ट से सेवा खाते के क्रेडेंशियल इस्तेमाल करने के लिए, यहां दिया गया फ़ंक्शन getServiceAccountService() इस्तेमाल किया जा सकता है:
/**
* Get a new OAuth2 service for a given service account.
*/
function getServiceAccountService() {
const serviceAccountKeyString = PropertiesService.getScriptProperties()
.getProperty('SERVICE_ACCOUNT_KEY');
if (!serviceAccountKeyString) {
throw new Error('SERVICE_ACCOUNT_KEY property is not set. ' +
'Please follow the setup instructions.');
}
const serviceAccountKey = JSON.parse(serviceAccountKeyString);
const CLIENT_EMAIL = serviceAccountKey.client_email;
const PRIVATE_KEY = serviceAccountKey.private_key;
// Replace with the specific scopes required for your API.
const SCOPES = ['SCOPE'];
return OAuth2.createService('ServiceAccount')
.setTokenUrl('https://oauth2.googleapis.com/token')
.setPrivateKey(PRIVATE_KEY)
.setIssuer(CLIENT_EMAIL)
.setPropertyStore(PropertiesService.getScriptProperties())
.setScope(SCOPES);
}
SCOPE को उस अनुमति के दायरे से बदलें जिसका इस्तेमाल करके आपको एपीआई को कॉल करना है. यह स्क्रिप्ट, सेवा खाते के उन क्रेडेंशियल का इस्तेमाल करती है जिन्हें आपने SERVICE_ACCOUNT_KEY स्क्रिप्ट प्रॉपर्टी के तौर पर पिछले चरण में सेव किया था.
इसके बाद, इन क्रेडेंशियल का इस्तेमाल करके एपीआई को कॉल किया जा सकता है. यहां दिए गए उदाहरण में, UrlFetch सेवा के साथ इसे दिखाया गया है:
function callApi() {
const service = getServiceAccountService();
// TODO(developer): Replace with the payload
const payload = {};
// TODO(developer): Replace with the API endpoint
const response = UrlFetchApp.fetch('API_URL', {
method: 'post',
headers: {
'Authorization': `Bearer ${service.getAccessToken()}`,
'Content-Type': 'application/json',
},
payload: payload,
});
const result = JSON.parse(response.getContentText());
return result;
}
API_URL को उस एचटीटीपी एंडपॉइंट से बदलें जिसे कॉल किया जा रहा है.