Google Directory API - 403 [未授权访问此资源/api],方法:roles.list

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

我正在使用 Google Directory API .NET 客户端获取域中的角色列表 (https://developers.google.com/admin-sdk/directory/reference/rest/v1/roles/list)。

我使用服务帐户代表用户进行身份验证以创建目录服务。 这是我的代码:

var initializer = new BaseClientService.Initializer
{
    ApplicationName = "GoogleConnector",
    HttpClientInitializer = new ServiceAccountCredential(
        new ServiceAccountCredential.Initializer(connectionDetails.ClientEmail) { User = connectionDetails.UserId, Scopes = scopes }.FromPrivateKey(connectionDetails.PrivateKey)
    )
};

var service = new DirectoryService(initializer);
var roles = await service.Roles.List("my_customer").ExecuteAsync();

现在,当用于模拟的用户分配有超级管理员角色时,它可以正常工作,没有任何问题。但是,向该用户提供超级管理员角色是不可行的。 当我删除超级管理员角色时,分配以下角色:

  1. 用户管理
  2. 团体读者
  3. 服务管理员

enter image description here

此外,还添加了下一个请求范围:

API 开始失败并出现以下错误:

Not Authorized to access this resource/
api [403] Errors [ Message[Not Authorized to access this resource/api] Location[ - ] Reason[forbidden] Domain[global] ]

编辑(在关于缺少对域用户的委派的评论之后)

我已向客户端应用程序提供域范围委托(因为我使用服务帐户,遵循指南)以及所有必需的范围: enter image description here

此外,所有其他 API 都工作正常。我正在使用 groups.listusers.list 方法,没有任何问题。它们照常返回结果。

问题仅在于 roles.list 方法。

如有任何帮助,我们将不胜感激。

google-api google-admin-sdk google-api-dotnet-client
1个回答
0
投票

您需要传递完整的credentials.json以及具有访问权限的管理员用户。

公共静态 DirectoryService GetService() { var 凭证 = GetCredentials();

    var workspaceAdmin = "[email protected]";

    var scopes = new[] { "https://www.googleapis.com/auth/admin.directory.rolemanagement" };

var credential = GoogleCredential.FromFile(credentials).CreateScoped(scopes).CreateWithUser(workspaceAdmin);

return new DirectoryService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential
});

}

© www.soinside.com 2019 - 2024. All rights reserved.