я получаю следующее сообщение об ошибке при использовании учетной записи службы + олицетворения для получения Google записей календаря:Как получить записи календаря Google с помощью учетной записи службы и .NET
Ошибки: «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