Go转Python集成Google API遇403未授权错误求助
嘿,从Go转Python时踩这个403未授权的坑太常见了,我帮你梳理几个必查的关键点,大概率能解决问题:
排查Google Admin Directory API 403错误的核心步骤
1. 务必给服务账号开启域范围委派
服务账号本身没法直接访问Google Workspace的Admin API,必须开启域范围委派才能模拟域内用户操作:
- 登录Google Cloud控制台,找到你的服务账号,进入「详细信息」页面
- 点击「编辑」,勾选「启用G Suite域范围委派」,保存后会生成一个客户端ID
- 接着登录Google Workspace Admin控制台,进入「安全」→「API控制」→「域范围委派」
- 点击「添加新的」,输入刚才生成的客户端ID,再准确添加你用到的两个Scope:
https://www.googleapis.com/auth/admin.directory.user.readonly和https://www.googleapis.com/auth/admin.directory.user,最后保存
2. 代码里必须模拟域内管理员账号
这是最容易漏掉的一步!服务账号需要模拟一个拥有Admin权限的域内用户(比如你的域管理员邮箱)才能发起请求。修正后的代码应该是这样:
from google.oauth2 import service_account from googleapiclient.discovery import build SCOPES = [ 'https://www.googleapis.com/auth/admin.directory.user.readonly', 'https://www.googleapis.com/auth/admin.directory.user' ] SERVICE_ACCOUNT_FILE = '你的服务账号密钥文件路径.json' # 替换成你的域内管理员邮箱,比如 admin@your-domain.com DELEGATED_ADMIN_EMAIL = 'admin@your-domain.com' # 加载服务账号凭证 credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES ) # 关键:创建带有委派用户的凭证 delegated_credentials = credentials.with_subject(DELEGATED_ADMIN_EMAIL) # 构建Admin Directory服务 service = build('admin', 'directory_v1', credentials=delegated_credentials)
3. 确认委派的管理员账号权限足够
别光看服务账号,还要检查你用来模拟的管理员账号有没有对应的权限:
- 登录Google Workspace Admin控制台,找到该管理员账号 → 进入「管理员角色和权限」
- 确保账号被分配了「用户管理」相关的角色(比如超级管理员,或者自定义角色包含
Admin Directory User的读写权限)
4. 核对Scope的一致性
虽然你代码里的Scope是对的,但要确认:
- 域范围委派里添加的Scope和代码里的完全一致,不能有拼写错误或细微差异
- 不要多添加或漏添加需要的Scope
5. 确认Admin Directory API已启用
最后检查Google Cloud控制台里是否启用了Admin Directory API:
- 进入「API和服务」→「已启用的API和服务」
- 搜索「Admin Directory API」,如果没启用就点击「启用」
内容的提问来源于stack exchange,提问作者Yaakovi
相关产品推荐
相关产品推荐

