使用OAuth与Google Analytics Admin API管理分析账户遇401鉴权错误
解决Google Analytics Admin API的401认证错误与权限配置问题
一、修复OAuth凭证导致的401错误
你的代码核心问题是把授权码(auth code)当成了刷新令牌(refresh token)直接使用,授权码是一次性临时凭证,必须先用来交换得到正式的refresh token才能长期复用。
正确的OAuth流程与代码修正
- 用授权码交换获取refresh token
先调用Google的token接口,将用户授权得到的auth code转换成可用的refresh token和access token:
import yaml import requests from google.oauth2.credentials import Credentials from google.analytics.admin import AnalyticsAdminServiceClient # 读取配置文件 yaml_file = open('./oauth_analytics.yaml') parsed_yaml_file = yaml.load(yaml_file, Loader=yaml.FullLoader) auth_code = parsed_yaml_file['test_auth_code'] client_id = parsed_yaml_file['client_id'] client_secret = parsed_yaml_file['client_secret'] redirect_uri = "你的授权回调地址" # 必须和OAuth客户端配置的地址完全一致 # 发送请求交换token token_response = requests.post( "https://oauth2.googleapis.com/token", data={ "code": auth_code, "client_id": client_id, "client_secret": client_secret, "redirect_uri": redirect_uri, "grant_type": "authorization_code" } ) token_data = token_response.json() # 用返回的refresh token创建合法凭证 credentials = Credentials( token_data['access_token'], refresh_token=token_data['refresh_token'], token_uri="https://oauth2.googleapis.com/token", client_id=client_id, client_secret=client_secret ) # 初始化客户端并调用接口 client = AnalyticsAdminServiceClient(credentials=credentials) for account in client.list_accounts(): print(account)
- 关键注意事项
- 确保OAuth客户端配置的
redirect_uri和代码中完全一致 - 申请授权时必须携带正确的权限Scope:比如管理GA属性需
https://www.googleapis.com/auth/analytics.edit,管理用户权限需https://www.googleapis.com/auth/analytics.manage.users - 面向外部用户的应用,需在Google Cloud Console的OAuth同意屏幕完成配置并发布应用
二、服务账号的权限分配方法
如果想用服务账号访问GA Admin API,需为其分配GA4账户/属性的具体权限:
- 登录Google Analytics 4管理员界面
- 进入目标账户或属性的用户管理页面
- 点击添加用户,输入服务账号的完整邮箱(格式为
[服务账号ID]@[项目ID].iam.gserviceaccount.com) - 为服务账号分配对应角色(如管理员、编辑者,按需选择)
- 保存后,服务账号即可通过密钥文件访问指定GA资源
其他排查点
- 确认Google Cloud Console中已启用Analytics Admin API
- 检查OAuth凭证的Scope是否包含所需权限,权限不足也会触发认证失败
- 本地测试时,OAuth客户端类型需选择桌面应用或Web应用(对应不同的redirect_uri规则)
内容的提问来源于stack exchange,提问作者maxpelic
相关产品推荐
相关产品推荐

