.net google calendar api:任何人都可以创建/更新/删除事件

时间:2016-06-06 05:46:20

标签: c# google-api google-calendar-api google-oauth google-api-dotnet-client

在我的应用程序中,我正在使用谷歌日历API。 我为我的帐户以及少数用户创建了客户端ID和客户端密码。 当我运行应用程序时,如果我没有登录到浏览器,它会要求我登录我的Gmail帐户。一旦我登录到我的Gmail帐户,我就可以在我的日历上成功获取/创建/更新/删除事件。

目前我使用我的日历ID登录到gmail帐户,我能够获取不同日历ID的事件,但是我无法通过其他用户日历ID创建/更新/删除事件。

我的要求是,我登录到我的gmail id,请说abc@gmail.com,我可以获取日历ID xyz@gmail.com的事件,但无法创建/更新/删除日历ID的事件xyz@gmail.com

我在互联网上做了很多研究但没有找到任何东西。据我所知,我们需要将授权+访问令牌传递给请求。我也尝试了这个但是没有用。

请建议我该怎么做才能达到这个要求。

calID = Convert.ToString(Session["CalenderId"]);
        userSecret = Convert.ToString(Session["UserSecret"]);

        if (!string.IsNullOrEmpty(calID) && !string.IsNullOrEmpty(userSecret))
        {
            using (var stream =
                new FileStream(userSecret, FileMode.Open, FileAccess.Read))
            {
                string credPath = System.Environment.GetFolderPath(
                    System.Environment.SpecialFolder.Personal);
                credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json/" + calID);

                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
                // Response.Write("Credential file saved to: " + credPath);
            }

            // Create Google Calendar API service.
            var service = new CalendarService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,

            });

希望你了解我的要求。等待最早的回应。 谢谢。

1 个答案:

答案 0 :(得分:1)

您需要记住,身份验证是针对每个用户的。当您运行GoogleWebAuthorizationBroker.AuthorizeAsync并保存" user"使用abc@google.com登录,您可以访问abc@googles.com' s日历。

当您使用GoogleWebAuthorizationBroker.AuthorizeAsync再次登录并保存" User2"使用xyz@google.com即可访问xyz@google.com' s日历。

您应该做的是让xyz@google.com与abc@google.com共享他们的日历,然后他们将有权更新它。

未经测试的示例代码:

AclRule body;
body.Role = "writer";
body.Scope.Type = "user";
body.Scope.Value = "abc@gmail.com";
service.Acl.Insert(body, calendarId).Execute();