.net google 日历 api : 任何人都可以 create/update/delete 事件

.net google calendar api : anybody can create/update/delete events

在我的应用程序中,我使用 google 日历 api。 我已经为我的帐户以及少数用户创建了客户端 ID 和客户端密码。 当我 运行 应用程序时,如果我没有登录到浏览器,它会要求我登录到我的 gmail 帐户。一旦我登录到我的 gmail 帐户,我就可以在我的日历上成功 get/create/update/delete 事件。

目前我使用我的日历 ID 登录到 gmail 帐户,我能够获取不同日历 ID 的事件,但我无法 create/update/delete 另一个用户日历 ID 的事件。

我的要求是,我登录到我的 gmail id 让我们说 abc@gmail.com 并且我能够获取日历 id xyz@gmail.com 的事件但不能 create/update/delete 日历 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,

            });

希望您理解我的要求。等待最早的回应。 谢谢。

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

当您使用 GoogleWebAuthorizationBroker.AuthorizeAsync 再次登录并使用 xyz@google.com 保存 "User2" 时,您可以访问 xyz@google.com 的日历。

您应该做的是让 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();