如何使用服务帐户和.NET检索Google日历条目

时间:2013-11-12 22:11:22

标签: c# .net google-calendar-api google-api-dotnet-client

使用服务帐户+模拟检索Google日历条目时出现以下错误:

错误:“access_denied”,描述:“”,Uri:“”

我可以使用用户和服务帐户流创建事件(无模拟)。我可以使用用户和服务帐户流程(有和没有模仿)检索日历。我只能用户流检索日历事件。

在相关问题上,我注意到使用oAuth2用户流程返回的事件包括那些我不是参与者的事件,所以我不清楚模仿是否应该将返回的事件过滤到仅我参与的那些事件。

以下是服务帐户+模拟代码:

string serviceAccountEmail = "...@developer.gserviceaccount.com";
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

1 个答案:

答案 0 :(得分:0)

我们的Calendar API小组检查了一个,他们发现了以下内容:

  1. 您尝试使用服务帐户628725648769-cda .... 3djjj@developer.gserviceaccount.com访问lbl.gov_7d ... 7oag@group.calendar.google.com的事件。我对么? 看起来您在12日使用该服务帐户执行了成功的事件插入操作。

  2. 该帐户没有来自该帐户的失败请求。

  3. 但是,该服务帐户也在12日访问了lbl.gov_oe10h ..... un9c@group.calendar.google.com,在开始时,操作返回404,后者200(可能有人更改了ACL)在此期间,这个日历?)。

  4. 有道理吗?