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

调用Google API拉取用户列表时服务账号授权报403未授权问题求助

Google Admin Directory API 403 权限错误解决方法

核心原因

服务账号开启Google Workspace全域委托后,本身没有域资源的访问权限,必须模拟域内拥有用户管理权限的管理员账号调用接口,你的现有代码未指定模拟的管理员账号,因此触发权限拦截。

修复步骤

  • 准备一个你的Google Workspace域内的管理员账号,要求该账号有用户列表查看/管理权限,优先使用域超级管理员账号,记好账号邮箱。
  • 修改凭证创建代码,新增subject参数指定模拟的管理员账号,修改后代码如下:
import google.auth
import google.auth.transport.requests
from google.oauth2 import service_account
import requests

credentials = service_account.Credentials.from_service_account_file(
    'key.json', 
    scopes=[
        'https://www.googleapis.com/auth/admin.directory.user',
        'https://www.googleapis.com/auth/admin.directory.group',
        'https://www.googleapis.com/auth/admin.directory.group.member',
        'https://www.googleapis.com/auth/admin.directory.user.security',
        'https://www.googleapis.com/auth/admin.directory.user.readonly'
    ],
    subject='admin@你的实际域名.com' # 新增本行,替换为你自己的域管理员邮箱
)
auth_req = google.auth.transport.requests.Request()
credentials.refresh(auth_req)
response = requests.get(
    'https://www.googleapis.com/admin/directory/v1/users?domain=你的实际域名.com', # 替换为你自己的Workspace域名
    headers={'Authorization': f'Bearer {credentials.token}'}
)
print(response.json())
  • 核对Google Workspace后台的API权限配置:进入「管理后台 > 安全 > 访问权限和数据控制 > API 控件 > 管理第三方应用的 API 访问权限」,确认你添加的客户端ID是服务账号的客户端ID(不是服务账号邮箱),且授权的范围和代码里的scopes完全一致。
  • 验证模拟的管理员账号权限:直接用该管理员账号登录Google Admin后台,确认可以正常查看域内全量用户列表。

仍报错的排查方向

  • 确认服务账号的全域委托开关已经开启,可在Google Cloud控制台「IAM与管理 > 服务账号 > 对应服务账号 > 高级设置」里查看状态。
  • 确认你使用的密钥文件是当前开启全域委托的服务账号对应的密钥,没有混用其他服务账号的密钥。
  • 确认你的Google Workspace域名是已经完成备案验证的有效域名,没有使用测试域名或者未绑定的域名。

内容的提问来源于stack exchange,提问作者Artiom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:36:03