Я получаю следующую ошибку при использовании учетной записи службы + олицетворение для получения записей календаря Google:
Ошибка: "access_denied", Описание: "", Uri: ""
Я могу создавать события, используя поток учетных записей пользователей и служб (без олицетворения). Я могу получать календари, используя поток учетных записей пользователей и служб (с олицетворением и без него). Я могу получать события календаря только с пользовательским потоком.
Что касается связанного с этим вопроса, я заметил, что при использовании пользовательского потока oAuth2 возвращаемые события включают в себя те, в которых я не участвую, поэтому мне неясно, должно ли олицетворение фильтровать возвращенные события только для тех, в которых я участвую.
Вот сервисный аккаунт + код олицетворения:
string serviceAccountEmail = "[email protected]";
var certificate = new X509Certificate2(Server.MapPath("~") + @"\bin\key.p12", "notasecret",
X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(new
ServiceAccountCredential.Initializer(serviceAccountEmail)
{ Scopes = new[] { CalendarService.Scope.Calendar }, User="my email here" }.FromCertificate
(certificate));
BaseClientService.Initializer initializer = new BaseClientService.Initializer();
initializer.HttpClientInitializer = credential;
initializer.ApplicationName = "Google Calendar Sample";
service = new CalendarService(initializer);
IList list = service.CalendarList.List().Execute().Items; // throws error
foreach (CalendarListEntry calendar in list)
DisplayFirstCalendarEvents(calendar);
Получение календаря напрямую также вызывает ту же ошибку:
Calendar cal1 = service.Calendars.Get("my personal calendar id").Execute(); //throws same error