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

使用普通账号调用GA4 Data API时遇多种认证错误求助

问题:使用普通用户凭证调用GA4 Data API Python客户端的认证错误

场景描述

尝试通过普通用户OAuth凭证调用Google Analytics Data API(GA4)获取报表,使用BetaAnalyticsDataClient客户端,核心代码如下:

请求代码

request = RunReportRequest(
    property=f"properties/11111",
    dimensions=[Dimension(name=f['name']) for f in report_definition['dimensions']],
    metrics=[Metric(name=f['expression']) for f in report_definition['metrics']],
    date_ranges=[DateRange(start_date=date, end_date=date)],
)
response = client.run_report(request)

凭证初始化代码(初始版本)

credentials = Credentials(
    token=None,
    refresh_token=config['refresh_token'],
    client_id=config['client_id'],
    client_secret=config['client_secret'],
    token_uri="https://accounts.google.com/o/oauth2/token",
    scopes=["https://www.googleapis.com/auth/analytics.readonly"]
)

client = BetaAnalyticsDataClient(credentials=credentials)

遇到的错误

  1. 调用run_report时抛出gRPC错误:
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
    status = StatusCode.UNAVAILABLE
    details = "Getting metadata from plugin failed with error: ('invalid_grant: Bad Request', {'error': 'invalid_grant', 'error_description': 'Bad Request'})"
    debug_error_string = "UNKNOWN:Error received from peer analyticsdata.googleapis.com:443 {created_time:"2023-01-14T14:12:10.907813+03:00", grpc_status:14, grpc_message:"Getting metadata from plugin failed with error: ('invalid_grant: Bad Request', {'error': 'invalid_grant', 'error_description': 'Bad Request'})"}"
>
  1. 手动加入access token后,出现401认证错误:
google.api_core.exceptions.Unauthenticated: 401 Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential.

已知条件:凭证在其他项目可用,服务账号调用无问题,但因前端OAuth流程限制,必须使用普通用户账号。

解决建议

可以使用普通用户账号(OAuth 2.0授权)调用GA4 Data API,按以下步骤排查修复:

  • 确认refresh_token的有效性

    • refresh_token仅在授权时包含offline_access scope才会生成,若用户重新授权、账号密码变更或权限调整,refresh_token会失效。需确保OAuth授权流程同时包含offline_access和https://www.googleapis.com/auth/analytics.readonly两个scope。
  • 正确初始化凭证并自动管理token

    • 不要手动传入token,让Credentials类自动处理token刷新。确保refresh_token、client_id、client_secret完全正确,且OAuth客户端类型为桌面应用或Web应用(非服务账号)。改进后的代码:
      from google.oauth2.credentials import Credentials
      import requests
      
      credentials = Credentials(
          refresh_token=config['refresh_token'],
          client_id=config['client_id'],
          client_secret=config['client_secret'],
          token_uri="https://accounts.google.com/o/oauth2/token",
          scopes=[
              "https://www.googleapis.com/auth/analytics.readonly",
              "offline_access"
          ]
      )
      # 显式刷新token确保有效性
      credentials.refresh(requests.Request())
      
      client = BetaAnalyticsDataClient(credentials=credentials)
      
  • 验证用户GA4资源权限

    • 确认该普通账号拥有目标GA4媒体资源的查看权限,需在GA4后台「管理-用户管理」中检查账号权限配置。
  • 切换至REST传输模式规避gRPC问题

    • 第一个错误的StatusCode.UNAVAILABLE可能与gRPC依赖有关,可强制使用REST模式调用:
      from google.analytics.data_v1beta import BetaAnalyticsDataClient
      from google.api_core.client_options import ClientOptions
      
      client_options = ClientOptions(api_endpoint="analyticsdata.googleapis.com:443")
      client = BetaAnalyticsDataClient(credentials=credentials, client_options=client_options)
      
  • 避免手动管理access token

    • 手动传入的token可能已过期或scope不匹配,access token有效期通常为1小时,推荐让Credentials类自动处理刷新逻辑,无需手动维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:55:16