सर्वर कुंजी का उपयोग करते समय Google शीट एपीआई "कॉलर की अनुमति नहीं है" देता है


95

मैंने एपीआई प्रबंधक में एक सर्वर कुंजी उत्पन्न की है और अपने मैक पर निम्नलिखित को निष्पादित करने का प्रयास किया है:

curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'

लेकिन यह वही है जो यह लौटाता है:

{
 "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

मुझसे यहां क्या गलत हो रहा है?


4
कुंजी सार्वजनिक डेटा तक पहुँचने के लिए है, जो आप कर रहे हैं उसके लिए प्रमाणित पहुँच की आवश्यकता होती है।
DaImTo

अधिकांश मामलों में स्कोप की कुछ समस्या है। कृपया जाँचें और सत्यापित करें कि स्क्रिप्ट के लिए कौन से स्कोप आवश्यक हैं।
dpkrai96

जवाबों:


132

इस समस्या को हल करने के लिए, निम्न का प्रयास करें:

  1. एक सेवा खाता बनाएँ: https://console.developers.google.com/iam-admin/serviceaccounts/
  2. विकल्पों में, एक कुंजी बनाएँ: यह कुंजी आपके सामान्य client_secret.json है - इसे उसी तरह उपयोग करें
  3. सेवा खाते के लिए स्वामी बनाएं (सदस्य का नाम = सेवा खाता आईडी = सेवा खाता ईमेल पूर्व: thomasapp@appname-201813.iam.gserviceaccount.com
  4. अपने सेवा खाते के ईमेल पते की प्रतिलिपि बनाएँ = सेवा खाता आईडी
  5. बस अपने ब्राउज़र में उस Google शीट पर जाएं जिसे आप इंटर करना चाहते हैं
  6. अपनी स्क्रीन के शीर्ष दाईं ओर SHARE पर जाएं
  7. उन्नत सेटिंग्स पर जाएं और इसे अपने सेवा खाते के ईमेल पते के साथ साझा करें: thomasapp@appname-201813.iam.gserviceaccount.com

यह मेरे लिए काम :)


1
यह मेरे लिए काम किया। वैसे: google मेघ एडमिन में जाएं ... प्रोजेक्ट> IAM & एडमिन> सर्विस अकाउंट्स .... यदि आपने सर्विस अकाउंट सेटअप किए हैं, तो आपको प्रत्येक संबंधित सर्विस अकाउंट के लिए एक विशेष ईमेल दिखाई देगा। सुनिश्चित करें कि आपने Google पत्रक API को भी सक्षम किया है। शाब्दिक रूप से, आप बस Google शीट "शेयर" बटन से सेवा खाता ईमेल पता साझा करते हैं।
जेसन एफ

1
हाँ ... कुंजी सिर्फ सेवा खाते के ईमेल के साथ दस्तावेज़ को साझा करना है ....
user1102171

2
कुंजी जसन क्रेडेंशियल जसन से बहुत अलग है जो मैंने जावा क्विकार्ट गाइड (शीट्स एपीआई के लिए) से प्राप्त किया था। मैं इसे कैसे लागू करूं?
कार्डिनल - मोनिका

2
आप ग्राहक रहस्य का उपयोग कैसे करते हैं? क्या आप इसके बजाय सेवा खाते के साथ एक एपीआई कुंजी बना सकते हैं?
स्टीफन फिलिप्स

बहुत बहुत धन्यवाद। इसे प्रलेखन या कुछ और में शामिल किया जाना चाहिए।
अब्दुल मलिक

45

मुझे पता है कि जवाब देने में थोड़ी देर हो गई है लेकिन उसी मुद्दे से जूझ रहे अन्य लोगों के लिए।
बस अपने ड्राइव पर शीट की अनुमति को सार्वजनिक करें ताकि एपीआई कॉल के माध्यम से इसे प्रमाणीकरण के बिना एक्सेस किया जा सके।

पहुंच बदलने के लिए:

  1. गूगल ड्राइव में ओपेन शीट
  2. शीर्ष दाएं कोने पर, साझा करें पर क्लिक करें
  3. प्रॉम्प्ट विंडो के नीचे, उन्नत पर क्लिक करें
  4. लिंक के साथ सार्वजनिक या लोगों के लिए अनुमति बदलें (कोई साइनिन आवश्यक नहीं)

प्रमाणीकरण के बिना शीट से डेटा प्राप्त करने के लिए एपीआई अनुरोध भेजें।

नोट: यदि शीट में संवेदनशील डेटा है, तो इसे सार्वजनिक करना सुरक्षित नहीं है और इसे प्रमाणीकृत पहुँच के साथ करना है।


37
इसके अलावा, आप इस शीट को विशिष्ट ईमेल Ex के साथ साझा कर सकते हैं। आपका सेवा खाता (परियोजना) ईमेल। "client_email": "XXXXX@norministr-gasket-XXXX.iam.gserviceaccount.com", यह आपकी स्क्रिप्ट द्वारा शीट तक पहुँचने की अनुमति देगा।
किशन पटेल

4
धन्यवाद भाई। आपके द्वारा उल्लिखित किए गए दस्तावेज़ों में कोई लिखित बातें नहीं हैं।
मौलिक दोडिया

1
सहमत @MaulikDodia। Google API डॉक्स इसे यहां कहता है , लेकिन यह उन लोगों के लिए स्पष्ट नहीं है जो केवल सार्वजनिक वेबसाइट पर डेटा प्रदर्शित करने के लिए एपीआई का उपयोग करना चाहते हैं। मैं इस सब पर कैसे-कैसे लिखने की प्रक्रिया में हूँ। जब मैं करूँगा तो आपको इसका एक DM भेजूँगा।
एडवर्ड

बहुत बहुत धन्यवाद दोस्त @ user3411192
मौलिक डोडिया

29

@ KishanPatel की टिप्पणी पर ध्यान देना सुनिश्चित करें:

इसके अलावा, आप इस शीट को विशिष्ट ईमेल Ex के साथ साझा कर सकते हैं। आपका सेवा खाता (परियोजना) ईमेल। "client_email": "XXXXX@norministr-gasket-XXXX.iam.gserviceaccount.com", यह आपकी स्क्रिप्ट द्वारा शीट तक पहुँचने की अनुमति देगा।


4

सबसे आसान तरीका gcloud cli का उपयोग करके ठीक करना है। अधिक डॉक्स यहाँ https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin

Gcloud स्थापित करें

sudo apt-get install google-cloud-sdk

फिर कॉल करो

gcloud init

फिर अपने सक्रिय प्रोजेक्ट और क्रेडेंशियल्स की जांच करें

gcloud config configurations list

यदि यह ठीक नहीं है, तो सुनिश्चित करें कि आप सही खाते से प्रमाणित हैं:

gcloud auth list
* account 1
  account 2

यदि नहीं, तो परियोजना के खाते में परिवर्तन करें:

gcloud config set account `ACCOUNT`

खाते के आधार पर, परियोजना सूची अलग होगी:

gcloud projects list

- project 1
- project 2...

इच्छित प्रोजेक्ट पर स्विच करें:

gcloud config set project `PROJECT NAME`

इसके बाद एप्लिकेशन डिफॉल्ट क्रेडेंशियल बनाएं gcloud auth application-default loginऔर फिर Google-क्लाउड स्वचालित रूप से ऐसे क्रेडेंशियल्स का पता लगाएगा।


0

मेरे 10 सेंट ... जावा का उपयोग करके शीट को पढ़ने के लिए एक सरल उदाहरण ।

    private Credential getCredentials() throws IOException {
            final InputStream accessKey = new ByteArrayInputStream("<credential json>");
            final GoogleCredential credential = GoogleCredential.fromStream(accessKey)
                    .createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS_READONLY));
            return credential;
        }

    private HttpTransport httpTransport() {
            try {
                return GoogleNetHttpTransport.newTrustedTransport();
            } catch (GeneralSecurityException | IOException e) {
                throw new SpreadSheetServiceException(e);
            }
        }


    Sheets service = new Sheets.Builder(httpTransport(), JSON_FACTORY, getCredentials())
                    .setApplicationName("app-name")
                    .build();
            ValueRange response = service.spreadsheets().values()
                    .get("<spread_sheet_id>", "A1:A")
                    .execute();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.