Kto jest właścicielem kalendarzy utworzonych przez konto usługi za pośrednictwem Google Calendar API i jak można je udostępniać?
Załóżmy, że mam konto Google [email protected]
z project project-1
(skonfigurowane jako aplikacja Google App Engine w Google Developer Console) i konto usługowe z adresem e-mail [email protected]
, które należą do niego.
Wiem, jak używać tego konta usługowego do tworzenia kalendarza i programowego manipulowania jego wpisami: używam biblioteki Google API Client Library (wersja Java, z poświadczeniami kont usługowych), aby wywołać Google Calendar API wewnątrz mojej aplikacji Google App Engine i właśnie tak. Jednak wszelkie tak utworzone kalendarze wydają się być wyraźnie własnością konta serwisu, a nie mojego konta Google. Wnioskuję z następujących spostrzeżeń:
- kiedy przeglądam kalendarz mojego konta Google w interfejsie Google Calendar UI , żaden z programowo utworzonych kalendarzy nie pojawia się pod
My calendars
. - Kiedy próbuję uzyskać dostęp do takiego kalendarza, wydając
Other calendars
|Add a friend´s calendar
i z kontami serwisowymi adres e-mail, mogę wysłać prośba, ale nigdy nie dostaje odpowiedzi (prawdopodobnie dlatego, że adres e-mail konta serwisu nie jest "prawdziwym" adresem e-mail). - podczas tworzenia kalendarzy programowo nie ustawiam
CalendarListEntry#hidden
, więc domyślnefalse
powinno się stosować.
Więc moje pytanie jest takie: jak Mogę uzyskać dostęp do kalendarzy i wpisów kalendarza, które zostały utworzone programowo za pomocą Google Calendar API (i klienta Java w moim przypadku) w normalnym Google Calendar Web UI. Np. czy konto serwisu udostępniaj kalendarze z własnym kontem Google lub Mogę bezpośrednio manipulować kalendarzami konta Google za pomocą poświadczeń konta usługowego w interfejsie użytkownika.
Zdaję sobie sprawę, że było kilka poprzednich pytań na ten sam temat, ale jak dotąd nie pomogły mi rozwiązać zagadki.
3 answers
Będziesz musiał programowo udostępnić kalendarz utworzony przez konto serwisu. Kalendarze są własnością konta serwisu.
Co próbowałeś:
- kalendarze nie pojawiają się na twoim koncie, ponieważ nie masz prawa do ich dostępu, nawet jeśli jesteś administratorem appengine.
- wpisanie adresu e-mail konta usługi nie wyświetla kalendarza w interfejsie użytkownika, ponieważ adres e-mail konta usługi nie jest adresem e-mail kalendarz. Jedno konto usługi może tworzyć wiele kalendarzy.
Udostępnij kalendarz programowo ze swoim kontem, Zaloguj unikalny identyfikator kalendarza, a następnie wprowadź go w interfejsie użytkownika.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-13 17:22:53
Myślałem, że musisz utworzyć kalendarz z parametrem PRN (który w zasadzie fałszuje Twój istniejący adres konta google NA tożsamości "właściciela" kalendarza)
Użycie parametru prn pozwoli więc na wykorzystanie uwierzytelniania konta usługi do (na przykład ) dodawania zdarzeń na swoje nazwisko (adres google).
If found a discussion using the PRN parameter
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 12:27:50
Zgodnie z (nieaktualną) dokumentacją, należy wywołać .setServiceAccountUser("[email protected]")
, A Zdarzenie pojawi się w kalendarzu danego użytkownika.
Https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests
Deleguj władzę w całej domenie
Jeśli masz delegowany dostęp do konta usługi w całej domenie i chcesz podszywać się pod konto użytkownika, określ adres e-mail konta użytkownika za pomocą metody setServiceAccountUser z fabryki GoogleCredential. Na przykład:
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(emailAddress)
.setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12"))
.setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
.setServiceAccountUser("[email protected]")
.build();
Musi to być konto usługowe dla domeny GSuite i musisz włączyć delegowanie całej domeny GSuite.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 17:19:45