服务帐户 - 必须是 G Suite 域用户
Service Account - Must be a G Suite domain user
这是我的团队首次尝试使用 Google Cloud 和 GSuite 实现功能。在搜索问题和社区之后,我还没有找到似乎是正确的前进道路,或者至少没有设法获得所需的功能。
背景
我们有一个 device/display 显示 given/specific GSuite Room 资源的日历和事件信息。
作为显示有关特定事件的信息的一部分,我们希望显示 attendee/invitee 个姓名。
实施
我们正在使用服务帐户成功调用日历 API。但是,当活动信息返回时,与会者信息仅包括与会者电子邮件地址。
实施正在使用 Google 的 .NET 客户端库。
我们发现 post 指示我们需要进行跟进电话,以便向人们 API 获取更多与会者信息。
使用相同的服务帐户查询人员 API 时,我们收到错误 Must be a G Suite domain user
。
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.6.1",
"title": "An error occured while processing your request.",
"status": 500,
"detail": "Google.Apis.Requests.RequestError\nMust be a G Suite domain user. [400]\nErrors [\n\tMessage[Must be a G Suite domain user.] Location[ - ] Reason[failedPrecondition] Domain[global]\n]\n",
"traceId": "|6007b977-42e9ca34c40a6cb0."
}
下面是当前被破解的代码,只是试图对 People Service 进行成功查询 API
public async Task<IList<Person>> GetAttendees(string tenant, string spaceEmail)
{
var serviceAccount = _redisCache.GoogleTenantCredentials.StringGet(tenant).ToString();
var svcDto = JsonConvert.DeserializeObject<ServiceAccountDto>(serviceAccount);
if (!string.IsNullOrEmpty(serviceAccount))
{
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(svcDto.ClientEmail)
{
Scopes = new[] { PeopleServiceService.Scope.DirectoryReadonly }
}.FromPrivateKey(svcDto.PrivateKey));
var svc = new PeopleServiceService(new BaseClientService.Initializer { HttpClientInitializer = credential });
var request = svc.People.ListDirectoryPeople();
request.ReadMask = "names,emailAddresses";
request.Sources = PeopleResource.ListDirectoryPeopleRequest.SourcesEnum
.DIRECTORYSOURCETYPEDOMAINPROFILE;
var result = await request.ExecuteAsync();
return result.People;
}
return null;
}
研究错误后,我们找到了允许服务帐户全域委派的参考资料。尝试按照文档进行操作,我们有以下设置。
我们今天花了一些时间在 Google 支持上,他们用下面的标签将我们引导到 Stack Overflow。
不确定我们哪里出错了。由于这是一个 test/sandbox Google 环境,我们一直在想的一件事是 GSuite 域是否正确链接到云端,但我们一直是尝试验证其正确性的新手.
您需要为服务帐户设置全域委派这是我所知道的最好的文档。 Perform G Suite Domain-Wide Delegation of Authority
除此之外,请确保您已委托给用户。
var gsuiteUser = "user@YourDomain.com";
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(svcDto.ClientEmail)
{
User = gsuiteUser,
Scopes = new[] { PeopleServiceService.Scope.DirectoryReadonly }
}.FromPrivateKey(svcDto.PrivateKey));
要从人们那里阅读 api 你需要一个你正在阅读其数据的人,或者你只是要阅读它没有的服务帐户数据。
这是我的团队首次尝试使用 Google Cloud 和 GSuite 实现功能。在搜索问题和社区之后,我还没有找到似乎是正确的前进道路,或者至少没有设法获得所需的功能。
背景
我们有一个 device/display 显示 given/specific GSuite Room 资源的日历和事件信息。
作为显示有关特定事件的信息的一部分,我们希望显示 attendee/invitee 个姓名。
实施
我们正在使用服务帐户成功调用日历 API。但是,当活动信息返回时,与会者信息仅包括与会者电子邮件地址。
实施正在使用 Google 的 .NET 客户端库。
我们发现 post 指示我们需要进行跟进电话,以便向人们 API 获取更多与会者信息。
使用相同的服务帐户查询人员 API 时,我们收到错误 Must be a G Suite domain user
。
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.6.1",
"title": "An error occured while processing your request.",
"status": 500,
"detail": "Google.Apis.Requests.RequestError\nMust be a G Suite domain user. [400]\nErrors [\n\tMessage[Must be a G Suite domain user.] Location[ - ] Reason[failedPrecondition] Domain[global]\n]\n",
"traceId": "|6007b977-42e9ca34c40a6cb0."
}
下面是当前被破解的代码,只是试图对 People Service 进行成功查询 API
public async Task<IList<Person>> GetAttendees(string tenant, string spaceEmail)
{
var serviceAccount = _redisCache.GoogleTenantCredentials.StringGet(tenant).ToString();
var svcDto = JsonConvert.DeserializeObject<ServiceAccountDto>(serviceAccount);
if (!string.IsNullOrEmpty(serviceAccount))
{
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(svcDto.ClientEmail)
{
Scopes = new[] { PeopleServiceService.Scope.DirectoryReadonly }
}.FromPrivateKey(svcDto.PrivateKey));
var svc = new PeopleServiceService(new BaseClientService.Initializer { HttpClientInitializer = credential });
var request = svc.People.ListDirectoryPeople();
request.ReadMask = "names,emailAddresses";
request.Sources = PeopleResource.ListDirectoryPeopleRequest.SourcesEnum
.DIRECTORYSOURCETYPEDOMAINPROFILE;
var result = await request.ExecuteAsync();
return result.People;
}
return null;
}
研究错误后,我们找到了允许服务帐户全域委派的参考资料。尝试按照文档进行操作,我们有以下设置。
我们今天花了一些时间在 Google 支持上,他们用下面的标签将我们引导到 Stack Overflow。
不确定我们哪里出错了。由于这是一个 test/sandbox Google 环境,我们一直在想的一件事是 GSuite 域是否正确链接到云端,但我们一直是尝试验证其正确性的新手.
您需要为服务帐户设置全域委派这是我所知道的最好的文档。 Perform G Suite Domain-Wide Delegation of Authority
除此之外,请确保您已委托给用户。
var gsuiteUser = "user@YourDomain.com";
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(svcDto.ClientEmail)
{
User = gsuiteUser,
Scopes = new[] { PeopleServiceService.Scope.DirectoryReadonly }
}.FromPrivateKey(svcDto.PrivateKey));
要从人们那里阅读 api 你需要一个你正在阅读其数据的人,或者你只是要阅读它没有的服务帐户数据。