You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Directory API调用roles.list接口返回403权限错误:非超级管理员用户权限配置咨询

Google Directory API调用roles.list接口返回403权限错误:非超级管理员用户权限配置咨询

问题描述

我正在使用Google Directory API .NET客户端获取域中的角色列表,通过服务账号代表用户进行身份验证来创建Directory Service,代码如下:

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();

当用于身份模拟的用户是超级管理员时,代码运行完全正常,但我们无法为该用户分配超级管理员权限。移除超级管理员角色后,我为该用户分配了以下预定义角色:

  • User Management
  • Groups Reader
  • Service Admin

用户分配的角色权限截图

同时也添加了以下请求作用域:

  • https://www.googleapis.com/auth/admin.directory.rolemanagement
  • https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly

但此时调用roles.list接口会返回403权限错误:

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

补充说明

我已经为客户端应用配置了全域委派,并添加了所有所需的作用域:
全域委派配置的作用域截图

并且其他API(如groups.list和users.list)都能正常返回结果,只有roles.list接口出现权限问题。


问题分析与解决方案

嗨,我来帮你梳理下这个问题的核心原因和解决办法!

首先,你遇到的403错误本质是:当前为用户分配的预定义角色,并不包含调用roles.list接口所需的权限。虽然你已经添加了admin.directory.rolemanagement相关的作用域,但Google Admin Console里的预定义角色(比如你选的User Management)和角色管理权限是完全独立的权限域,两者不能互相覆盖。

根据Google官方的权限映射规则,调用roles.list接口需要的是能够查看域内角色定义的权限,对应的Admin Console配置有两种方式:

方案1:分配预定义的「Role Management」角色

Admin Console里的「Role Management」预定义角色,专门用于管理域内的角色定义和角色分配,刚好匹配你调用roles.list的需求,且权限范围远小于超级管理员,完全符合你的安全诉求。直接给用于身份模拟的用户分配这个角色即可。

方案2:创建最小权限的自定义角色

如果预定义的「Role Management」权限仍然超出你的预期,你可以在Admin Console中创建一个自定义角色,仅勾选**「查看角色定义(View role definitions)」**这一个权限项,然后将该自定义角色分配给目标用户。这种方式能做到权限最小化,进一步降低安全风险。

额外注意事项

  • 权限生效延迟:给用户分配新角色后,Google的权限系统可能需要1-5分钟的同步时间,建议等待片刻后再进行测试,避免刚修改完就立刻测试导致的无效结果。
  • 全域委派验证:确认你的服务账号全域委派中已经包含https://www.googleapis.com/auth/admin.directory.rolemanagement作用域(从你的截图看已经配置完成,这部分无需调整)。

你可以先尝试方案1,应该能快速解决这个403错误;如果对权限有更严格的限制,再考虑方案2的自定义角色配置。


备注:内容来源于stack exchange,提问作者Nolik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:00:30