C# 未授权使用日历API的Google服务帐户
我正在尝试通过服务帐户连接到我们的G套件域上的所有日历 我创建了一个新项目,并在API和服务页面中启用了Google日历API 我创建了一个Google服务帐户,其中包含:C# 未授权使用日历API的Google服务帐户,c#,google-api,google-authentication,google-workspace,C#,Google Api,Google Authentication,Google Workspace,我正在尝试通过服务帐户连接到我们的G套件域上的所有日历 我创建了一个新项目,并在API和服务页面中启用了Google日历API 我创建了一个Google服务帐户,其中包含: 名字 似乎适用的角色 生成的json密钥文件 为整个域启用G套件 在服务帐户管理页面中,我使用了我的ID(AAA@BBB.iam.gserviceaccount.com) 我进入G套件安全模块,进入ManageAuthClients页面,输入ID并选择google日历API() 它正确识别了我的ID并添加: 123456
- 名字
- 似乎适用的角色
- 生成的json密钥文件
- 为整个域启用G套件
另外,在尝试获取所有日历的列表时,它是一个空列表。我要说的是,检查您是否已为G套件中的ManageAuthClients部分使用了正确的客户端ID。服务帐户电子邮件中的ID应与您需要使用的客户端ID不同 您可以通过两种方式确认您拥有正确的客户端ID:
客户机ID
键值对来获取客户机ID选项
。如果您已为帐户设置了域范围的委派(DwD),则应单击“查看客户端ID”,这会将您带到另一个屏幕,在那里您可以查看客户端ID我发现了哪里出了问题(来源:) 在G-Suite->Apps->Calendar->General settings中,我必须启用共享所有日历的选项,外部人员可以更改日历 进入任何日历后,与服务帐户电子邮件共享日历。那就是AAA@BBB.iam.gserviceaccount.com根据我的问题样本
据我所知,这两个步骤在文档中没有提到。很高兴我现在可以用了 我检查了两个,它们匹配。还验证了ManageAuthClients部分中的设置是否正确
var scopes = new[] { CalendarService.Scope.Calendar };
ServiceAccountCredential credential;
using (Stream stream = new FileStream("ToprServiceAccount-xxxxyyyyy.json", FileMode.Open, FileAccess.Read, FileShare.Read))
{
credential = GoogleCredential.FromStream(stream).CreateScoped(scopes).UnderlyingCredential as ServiceAccountCredential;
}
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential
});
var list = service.CalendarList.Get("planning@mydomain.com").Execute();