调用Google Directory API获取用户列表时遇403权限错误,求排查
我之前帮不少开发者排查过这个问题,结合你已经完成的配置,大概率是以下几个容易被忽略的步骤没做好:
服务账号未启用域范围授权
就算你在API Access Manager里允许了服务账号,还得给它开域范围委派权限,让它能代表域内用户访问Directory API。具体操作:- 进入Google Admin Console → 安全 → API控制 → 域范围委派
- 添加你的服务账号的客户端ID(在Google Cloud控制台的服务账号详情页能找到)
- 输入对应Directory API的OAuth 2.0范围,比如只读用户列表就填
https://www.googleapis.com/auth/admin.directory.user.readonly,如果要读写就用https://www.googleapis.com/auth/admin.directory.user - 保存后等个几分钟让配置生效
代码里没指定模拟的域管理员账号
服务账号本身没有访问域内用户数据的权限,必须模拟一个拥有管理员权限的域账号(比如admin@yourdomain.com)。检查你的代码里有没有类似这样的设置:# Python示例:给凭据加上要模拟的管理员账号 credentials = credentials.with_subject('admin@yourdomain.com')要是没加这一步,服务账号会以自身身份请求,肯定没权限访问。
模拟用的管理员账号权限不够
你用来模拟的账号得有对应的Directory API权限,比如“查看用户”或者“管理用户”的权限。去Google Admin Console的角色和权限里检查:找到这个管理员的角色,确保包含Admin Directory Users相关的权限(比如Users → Read权限)。API范围配置不匹配
确认域范围委派里加的范围和代码中请求的范围完全一致。比如代码里请求的是读写权限,但域范围委派只加了只读范围,就会触发403错误。验证令牌的权限范围
你可以用jwt.io解码拿到的JWT令牌,看看scope字段里有没有包含你需要的Directory API范围。如果没有,要么是令牌请求时的范围不对,要么是域范围委派的配置还没生效。
要是以上都检查过还是有问题,可以试试重新创建服务账号并重新配置域范围委派,有时候缓存会导致配置不及时生效。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

