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

使用Google Postmaster API服务账号连接时遇403权限问题求助

Google Postmaster Tools 服务账号403权限问题

我正尝试通过以下NuGet包搭建Google服务器到服务器的连接:

  • Google.Apis.Auth.OAuth2
  • Google.Apis.Services
  • Google.Apis.PostmasterTools.v1

由于是服务器到服务器连接,我选用Service Account(服务账号)方案。

以下是我的代码,最后一行执行失败:

var credential = GoogleCredential.FromFile("path\\to\\file\\boreal-dock-34534534534.json")
.CreateScoped(new[] { "https://www.googleapis.com/auth/postmaster.readonly" });

// Google.Apis.PostmasterTools.v1.PostmasterToolsService.
var service = new PostmasterToolsService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "C9Transact",
});

ListTrafficStatsResponse response = await service.Domains.TrafficStats.List("domains/domain.com").ExecuteAsync();

错误信息:

The service gmailpostmastertools has thrown an exception. HttpStatusCode is Forbidden. The caller does not have permission

错误详情:

{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "errors": [
      {
        "message": "The caller does not have permission",
        "domain": "global",
        "reason": "forbidden"
      }
    ],
    "status": "PERMISSION_DENIED"
  }
}

我已完成的配置:

  • 为服务账号主体分配了Editor、Service Account Token Creator、Service Account User角色;
  • 已生成密钥并下载JSON文件用于代码中,凭证部分似乎正常;
  • 已登录管理控制台添加Domain-wide Delegation(全域授权):Security -> Access and data control -> API Controls -> Domain-wide Delegation,添加了服务账号的Client ID及scope https://www.googleapis.com/auth/postmaster.readonly;
  • 使用的域名domains/????.com已在Google Postmaster页面验证。

但仍收到权限缺失错误,请问问题出在哪里?


问题排查与解决方法

  1. 核心问题:服务账号未获得Postmaster Tools域名授权
    域名在Postmaster Tools验证后,还需要单独给服务账号授权访问该域名:

    • 登录Google Postmaster Tools,找到已验证的目标域名
    • 进入域名的「设置」页面,添加服务账号的邮箱(格式:[服务账号ID]@[Google Cloud项目ID].iam.gserviceaccount.com)为该域名的管理员
  2. 全域授权配置无效(非Google Workspace场景)
    Domain-wide Delegation仅适用于Google Workspace(原G Suite)域名。如果你的域名是普通公共域名,这个配置完全没用,直接忽略即可,重点完成上面的Postmaster Tools域名授权。

  3. 冗余角色清理
    给服务账号分配Editor等Cloud项目角色是多余的,Postmaster Tools的权限控制不在Cloud项目层面。建议移除这些冗余角色,避免权限混乱。

  4. 代码参数校验
    确保代码中List("domains/domain.com")里的域名和Postmaster Tools中验证的域名完全一致,不要加www或其他前缀,比如验证的是domain.com就写domains/domain.com,验证的是sub.domain.com就写domains/sub.domain.com。

  5. Google Workspace用户额外配置
    如果你是Google Workspace用户,使用全域授权时,服务账号需要模拟一个Workspace域内的用户(该用户需已被添加为Postmaster Tools域名管理员),代码需修改为:

    var credential = GoogleCredential.FromFile("path/to/file.json")
        .CreateScoped(new[] { "https://www.googleapis.com/auth/postmaster.readonly" })
        .CreateWithUser("authorized-user@your-workspace-domain.com"); // 替换为Workspace域内的授权用户邮箱
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:35:21