के माध्यम से एक सेवा खाते का उपयोग कर v3 Google कैलेंडर API को कॉल करते समय अनधिकृत संदेश सबसे पहले, मुझे बताएं कि मैं क्या करने की कोशिश कर रहा हूं, क्योंकि यह दो भाग प्रश्न है।"लॉगिन आवश्यक" 401 ओएथ 2.0
मैं एक जेएक्स-आरएस सेवा का निर्माण कर रहा हूं जो OAuth2 के माध्यम से Google खाते के साथ आंतरिक रूप से प्रमाणीकृत है, इसलिए यह Google कैलेंडर तक पहुंच और कुशलतापूर्वक उपयोग कर सकता है। इस सेवा को एक वेबसाइट (जूमला) द्वारा बुलाया जाएगा, जो उपयोगकर्ताओं को कैलेंडर ईवेंट के साथ अपना ईमेल पता पंजीकृत करने के लिए साइट पर लॉगिन करने की अनुमति देगा ताकि ईवेंट निकट होने पर ईमेल सूचनाएं प्राप्त कर सकें। इन उपयोगकर्ताओं को अंतर्निहित Google खाते का कोई ज्ञान नहीं है।
तो मेरा पहला सवाल, सेवा खाता प्रमाणीकरण सही चीज़ का उपयोग कर रहा है? Google दस्तावेज़ों को देखते हुए, इसका एकमात्र उपयोग केस जो गैर-मानव प्रमाणीकरण (इसलिए सर्वर प्रमाणीकरण के लिए सर्वर) को पूरा करता है।
दूसरी समस्या यह है कि मैंने ऐसा करने के लिए कुछ कोड लिखा है, लेकिन जब मैं निष्पादन विधि कैलेंडर फ़ीड को कॉल करता हूं तो मुझे निम्न त्रुटि वापस वापस 401/अनधिकृत प्रतिक्रिया मिलती है। यह कोड Google नमूने से हटा लिया गया था।
मैं Google कैलेंडर API के v3-rev3-1.5.0-beta का उपयोग कर रहा हूं। मैंने खाते में कैलेंडर एपीआई चालू कर दी है, और एक निजी कुंजी बनाई और डाउनलोड की है, जिसका उपयोग नीचे दिए गए कोड में किया जाता है।
मैं नीचे दिए गए कोड को स्थानीय रूप से ग्रहण में कॉल कर रहा हूं, वेब सर्वर से नहीं।
तो पहली कॉल मैं एक क्रेडेंशियल वस्तु वापस पाने के लिए है (ईद के एक्स के साथ अस्पष्ट):
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
.
.
.
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("[email protected]")
.setServiceAccountScopes(CalendarScopes.CALENDAR)
.setServiceAccountPrivateKeyFromP12File(new File("D:/3cd8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXd635e-privatekey.p12"))
.build();
अगले कदम तो, कैलेंडर API कॉल करने के लिए इतना (कोई अन्य में कहा जाता है कोड की तरह है के बीच):
Calendar calendar = Calendar.builder(HTTP_TRANSPORT, JSON_FACTORY)
.setApplicationName("TestApp-Calendar/1.0").setHttpRequestInitializer(credential)
.build();
CalendarList feed = calendar.calendarList().list().execute();
कॉल() सूची निम्न त्रुटि में निष्पादित() परिणाम:।
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized { "code" : 401, "errors" : [ { "domain" : "global", "location" : "Authorization", "locationType" : "header", "message" : "Login Required", "reason" : "required" } ], "message" : "Login Required" } at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:159) at com.google.api.client.googleapis.json.GoogleJsonResponseException.execute(GoogleJsonResponseException.java:187) at com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:115) at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:112) at com.google.api.services.calendar.Calendar$CalendarList$List.execute(Calendar.java:510) at uk.org.reigatepriorybowmen.Service.registerEmailForAllCalendarEvents(Service.java:55) at uk.org.reigatepriorybowmen.Service.main(Service.java:74)
सेवा खाता स्थापना इस प्रकार है:
तो, क्या मैं गलत कर रहा हूँ ?! मैंने समाधानों की तलाश में घूमने के घंटों बिताए हैं, इसलिए यह मेरी आखिरी उम्मीद है।
आपकी सहायता के लिए अग्रिम धन्यवाद।
जस्टिन
क्या आपको कभी भी इसका समाधान मिलना चाहिए? –