使用服务账号访问G Suite Admin SDK Directory API遇403权限错误
解决服务账号访问Google Directory API的403权限问题
我之前也碰到过一模一样的问题!你遇到的403 Not Authorized错误,核心原因是服务账号缺少模拟域管理员的配置——毕竟服务账号本身不属于你的Google Workspace域,必须指定一个域内的管理员账号作为操作主体,才能调用Directory API这类需要域权限的接口。
核心修复:给JWT Claim Set添加sub参数
在你的PowerShell代码中,构造JWT声明的时候,必须加入sub字段,值为你的Google Workspace域内拥有Admin SDK权限的管理员邮箱(建议用超级管理员邮箱)。这个参数告诉Google:“我要以这个域管理员的身份来执行操作”。
修改后的rawclaims代码如下:
$rawclaims = [Ordered]@{ iss = "p12service@apiaccess-123456.iam.gserviceaccount.com" scope = "https://www.googleapis.com/auth/admin.directory.user" aud = "https://www.googleapis.com/oauth2/v4/token" iat = $createDate exp = $expiryDate sub = "admin@mydomain.com.au" # 替换为你的域管理员邮箱 } | ConvertTo-Json
额外检查点
除了添加sub参数,还要确认以下几个配置是否正确:
- 授予域范围权限的账号必须是超级管理员:只有Google Workspace超级管理员才能在Admin Console中为服务账号配置「域范围授权」,普通管理员没有这个权限。
sub对应的账号要有足够权限:确保你指定的管理员账号拥有用户管理权限(比如分配「超级管理员」或「用户管理管理员」角色)。- 清理API请求URL:你的用户列表请求URL里多了无效的
list&参数,修正后的URL应该是:
$usersapiendpoint = "https://www.googleapis.com/admin/directory/v1/users?customer=my_customer&domain=mydomain.com.au"
- 验证域范围授权配置:登录Google Admin Console,进入「安全」→「API控制」→「域范围授权」,确认你的服务账号的客户端ID已添加,且授权范围包含
https://www.googleapis.com/auth/admin.directory.user。
完成以上修改后,重新运行代码应该就能正常获取组织内的用户列表了。
内容的提问来源于stack exchange,提问作者Svyatoslav Pidgorny
相关产品推荐
相关产品推荐

