服务账号服务器到服务器调用Google Admin Reports API报401如何解决
问题解答
你对服务账号的认知是正确的,服务账号属于OAuth 2.0授权体系的一种,完全支持无用户交互的服务器到服务器调用Google Admin Reports API。你遇到的401错误核心原因是开启全域委托的服务账号调用Admin Reports API时,必须模拟一个属于当前Google Workspace组织、拥有报表访问权限的管理员账号,你当前的代码没有指定模拟的用户身份,服务账号以自身身份请求时没有组织内资源的访问权限。
解决方案步骤
- 首先确认前置配置无误:
- Google Cloud控制台中你使用的服务账号已开启「全域委托」功能
- Google Workspace管理后台的全域委派配置中,已正确添加该服务账号的客户端ID,且已绑定了你提到的两个权限scope
- 准备一个属于当前Workspace组织的账号,该账号已被分配超级管理员权限或「报表查看」相关管理员角色,有权限访问登录审计等报表数据
- 然后修改你的调用代码,在初始化服务账号凭证时添加
subject参数指定要模拟的管理员邮箱,修改后的代码示例如下:
creds = service_account.Credentials.from_service_account_file( 'credentials.json', scopes=SCOPES, subject='你的Workspace管理员邮箱地址@你的域名.com' # 新增这一行 ) with build('admin', 'reports_v1', credentials=creds) as service: response = service.activities().list(userKey='all', applicationName='login', maxResults=10).execute()
- 如果修改后仍然报错,可排查以下场景:
- 刚配置的全域委托权限存在最长15分钟的缓存延迟,等待后再重试
- 确认模拟的管理员账号未被冻结、权限未被收回
- 确认你使用的
credentials.json是服务账号的密钥文件,而非其他类型的OAuth凭证
内容的提问来源于stack exchange,提问作者rgahan
相关产品推荐
相关产品推荐

