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

如何调试Google API调用中的'unauthorized_client'授权错误

后续调试路径建议
  • 明确指定授权范围:当前代码未显式设置scopes,服务账号默认不会请求任何Workspace相关权限。需在创建Credentials时添加对应scopes参数,比如Admin Directory API的https://www.googleapis.com/auth/admin.directory.group.readonly。修改代码如下:

    from google.oauth2 import service_account
    from googleapiclient.discovery import build
    
    SCOPES = ['https://www.googleapis.com/auth/admin.directory.group.readonly']
    creds = service_account.Credentials.from_service_account_file("<cred>.json", scopes=SCOPES)
    delegated_creds = creds.with_subject("<admin_email@my_domain>")
    
    admin_service = build('admin', 'directory_v1', credentials=delegated_creds)
    results = admin_service.groups().list(userKey="<myemail@mydomaim>").execute()
    

    注意:scopes必须与Admin Console中授权的范围完全一致,不能多也不能少。

  • 验证模拟账号的权限:即使是超级管理员,也要确认该账号是否被组织单元权限策略限制了Admin Directory API访问。可直接用该账号登录Admin Console,手动查看目标用户的群组,确认操作可行。

  • 检查服务账号的IAM角色:Workspace API访问主要依赖域范围委派,但需确保服务账号未被添加冲突的限制性IAM角色。在GCP控制台IAM页面,查看该账号的角色列表,移除不必要的限制性角色。

  • 启用详细日志排查:

    1. 在GCP Cloud Logging中创建过滤器:protoPayload.methodName:"google.admin.directory.v1.GroupsService.List" 或 protoPayload.status.code:401,排查是否有遗漏的请求日志。
    2. 在代码中添加调试日志,打印credentials的scopes信息,确认权限范围已正确加载:
      print("Credentials scopes:", creds.scopes)
      
  • 重新生成服务账号密钥:密钥文件可能存在隐性格式或同步问题,尝试在GCP控制台删除现有密钥,重新生成新的JSON密钥文件替换使用。

  • 确认域范围委派同步状态:Admin Console中的域范围委派设置可能需要数分钟到几小时完全同步,若刚完成配置,等待一段时间后重试。

  • 测试最小权限场景:创建仅含必要scopes的测试授权,使用最基础的API调用(如admin_service.groups().list(customer='my_customer').execute()),排除用户参数导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:16:28