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

使用服务账户调用Google Business API获取评论时认证凭证无效问题

问题分析与解决方法

核心问题排查

  • 凭证未自动注入请求:你创建了ServiceAccountCredential和服务实例,但直接调用HttpClient.SendAsync时,客户端库没有自动触发凭证获取并附加access token到请求头,导致接口识别不到合法授权。
  • 无效Scope配置:配置的https://accounts.google.com/o/oauth2/v2/auth是OAuth2授权端点,不是合法的API权限范围,需移除。仅保留https://www.googleapis.com/auth/business.manage即可满足评论查询需求。
  • 权限配置不匹配:仅给服务账户设置API管理器查看者权限没用,必须将其添加为商家账户的管理者/所有者,才能访问商家位置的评论数据。
  • 服务类使用错误:你用了账户管理服务MyBusinessAccountManagementService,但查询评论需要用MyBusinessBusinessInformationService,二者负责的API范围不同。

修正后的代码

string path = HttpContext.Current.Server.MapPath(@"\App_Data\google_credential.json");
var credJson = File.ReadAllText(path);

// 用Google官方库直接解析凭证,无需自定义反序列化
var credential = GoogleCredential.FromJson(credJson)
    .CreateScoped(new[] { "https://www.googleapis.com/auth/business.manage" });

// 若商家账户属于Google Workspace,需添加域范围委派(模拟指定用户)
// credential = credential.CreateWithUser("商家账户管理员邮箱@你的域名.com");

// 创建正确的商家信息服务实例
var businessService = new Google.Apis.MyBusinessBusinessInformation.v1.MyBusinessBusinessInformationService(
    new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "你的应用名称"
    });

string accountId = "XXXXXXXX";
string locationId = "YYYYYYYY";

// 使用服务内置方法调用,自动处理授权逻辑
var reviewsRequest = businessService.Accounts.Locations.Reviews.List($"accounts/{accountId}/locations/{locationId}");
var reviewsResponse = await reviewsRequest.ExecuteAsync();
string result = JsonConvert.SerializeObject(reviewsResponse);

额外配置要求

  1. 绑定商家账户权限:登录Google商家账户后台,进入「人员权限」,添加服务账户邮箱,分配「管理者」权限。
  2. 域范围委派(Workspace账户专属):登录Google Workspace管理控制台,找到对应服务账户,启用域范围委派,并添加https://www.googleapis.com/auth/business.manage这个权限范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:53:14