在 .Net Core 中使用服务帐户正确实现 Google Calendar API

问题描述 投票:0回答:1

谷歌日历API让我很头疼。我的目标是访问我的私人日历,并通过我将创建的 Web 界面共享一些详细信息,问题是在完成所有步骤后,我仍然得到空响应并且没有错误,无法确切知道问题所在。 .. 到目前为止我已经完成的步骤:

  1. 创建了一个服务帐户并下载了一个 json 文件。
  2. 进入 admin.google.com > Security > Access and data control > API Controls > Domain-wide delegation 如下

  1. 添加我的 C# 代码如下:

GoogleCredential credential;
            using (var stream = new FileStream("googlekey2.json", FileMode.Open, FileAccess.Read))
            {

                stream.Position = 0;

                credential = GoogleCredential.FromStream(stream)
                             .CreateScoped(new string[] { CalendarService.Scope.Calendar, CalendarService.Scope.CalendarEvents });
            }

            Service = new CalendarService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Google Test App",
            });

响应只是一个空对象,没有错误...

感谢您在如何在 .net 核心应用程序上正确设置它以显示一些结果、一些日历信息方面提供的任何帮助,我也确实按照这里一些用户的建议与服务帐户电子邮件地址共享了我的日历但结果是一样的,没有错误,但里面什么也没有……

关于 Linda 女士的回答,是的,我确实使用我想要的角色设置了 DOMAIN WIDE DELEGATION,但由于某种原因我无法让它工作。

其他信息:我不是要让用户使用谷歌表单或类似方式登录,这是用于服务器 - 服务器通信,换句话说,它应该访问我的日历而无需用户进行任何交互,不应涉及任何用户,这就是为什么我选择域委托的“服务帐户”选项。

感谢您的帮助。

c# google-calendar-api service-accounts google-api-dotnet-client
1个回答
0
投票

Google 日历仅在您将 domain wide delegation 配置到 google workspace 域时支持服务帐户。

您不能将它与标准的 gmail 用户谷歌日历帐户一起使用。

var serviceAccountCredentialInitializer = new ServiceAccountCredential.Initializer(serviceAccount)
            {
                User = workspaceUser,
                Scopes = new[] { CalendarService.Scope.Calendar}

            }.FromCertificate(certificate);
© www.soinside.com 2019 - 2024. All rights reserved.