使用OAuth 2.0服务帐户通过API v3向Google Calendar添加事件



我得到一个禁止(403)时,试图添加一个事件到我的日历(API v3 &OAuth2),如下:

var service = CalendarService();
CalendarListResource.ListRequest request = service.CalendarList.List();
IList<CalendarListEntry> calendarList = request.Execute().Items;
foreach (CalendarListEntry entry in calendarList)
{
    Console.WriteLine(
        "Summary:{0}nLocation:{1}nTimeZone:{2}",
        entry.Summary, entry.Location, entry.TimeZone
        );
}
var startDate = DateTime.Now.AddDays(1);
var endDate = startDate.AddDays(1);
var eventBody = new Google.Apis.Calendar.v3.Data.Event
{
    Description = "Test 4 description",
    Summary = "Test 4 summary",
    Start = new EventDateTime
    {
        DateTime = startDate
    },
    End = new EventDateTime
    {
        DateTime = endDate
    }
};
var insertRequest = service.Events.Insert(calendarId: calendarId_emailAddress, body: eventBody); //InsertRequest
insertRequest.Execute();

我已经设置了oauth2服务帐户,授予范围,并共享日历。然而,我在日历共享部分注意到的是,我无法(没有可用的选项)共享读/写。唯一的选项是"freeBusyRead"。

编辑:

让我添加calendarId_emailAddress = "my_email_address"。我可以添加一个事件。没有错误。然后迭代找到它。但我的日程表上没有。我似乎没有在我的用户面板中建立日历和"实际日历"之间的连接。

怎么做呢?感谢任何帮助。谢谢。

您的Google Apps域可能将外部帐户的共享级别限制为免费/繁忙级别。服务帐户,即使是由域用户创建的,也始终被认为是域的外部帐户。

正确的方法是授权服务帐户代表您的域用户进行操作,然后作为服务帐户进行身份验证并代表用户进行操作,将事件添加到用户日历中。在Drive API文档中讨论了域范围内的授权,但也可以很容易地应用于Calendar API。

问题出在服务的认证上。场景…

1) ServiceAccountCredential没有用户集,而calendarId = "primary"产生一个进入日历的条目。日历?谁知道呢。我无法在我的界面中看到该用户的条目,但我确实在Events.List("primary")

中找到了该条目。

2) ServiceAccountCredential,用户设置为目标日历的email,并且calendarId = "primary"产生一个日历条目,我确实在该用户的界面中看到该条目,并且还在Events.List("primary")中找到该条目

情景1真的让我很困惑。不知道如何在日历中看到那个事件。

对此的任何见解都会有所帮助。谢谢!

相关内容

  • 没有找到相关文章