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ślne false 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.

Author: Community, 2014-01-13

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.

 18
Author: koma,
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

 0
Author: josh.thomson,
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.

 0
Author: Chloe,
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