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

为何Adsense Management API始终返回403权限拒绝错误?

问题描述

尝试使用AdSense Management API获取数据,已完成以下操作:

  • 创建项目并启用AdSense Management API
  • 创建服务账户并生成密钥文件

通过以下代码生成访问令牌:

private async getToken() {
        const { google } = require("googleapis");
        const path = Application.resourcesPath(`adsense.json`)
        const auth = new google.auth.GoogleAuth({
            keyFile: path,
            scopes: 'https://www.googleapis.com/auth/adsense.readonly',
        });
        let res = await auth.getAccessToken()
            .catch((err) => console.log("err...", err));
        return res
    }

使用生成的令牌通过Postman向以下地址发送请求:

https://adsense.googleapis.com/v2/accounts/pub-xxxxxxxxxxxx/adclients

尝试了Bearer Token和OAuth2两种认证方式,均收到403权限错误:

{
    "error": {
        "code": 403,
        "message": "The caller does not have permission",
        "status": "PERMISSION_DENIED"
    }
}
解决思路
  • 给服务账户授权目标AdSense账户
    服务账户默认没有访问AdSense账户的权限,需登录AdSense后台,将服务账户的邮箱(格式为xxx@xxx.iam.gserviceaccount.com)添加为账户授权用户,至少赋予只读权限。操作路径:AdSense后台 → 设置 → 访问和权限 → 添加用户,输入服务账户邮箱并选择权限级别。

  • 验证令牌的权限范围
    确认生成令牌时指定的scopes为https://www.googleapis.com/auth/adsense.readonly,可通过JWT解析工具查看令牌包含的scopes是否正确,确保权限覆盖所需操作。

  • 检查请求的账户ID准确性
    确认URL中的pub-xxxxxxxxxxxx是正确的AdSense账户ID,可在AdSense后台的账户信息中核对准确ID,避免输入错误。

  • 直接用Google客户端库发起请求
    跳过手动传递令牌到Postman的步骤,用googleapis库直接调用API,减少令牌传递环节的问题。示例代码:

    const { google } = require("googleapis");
    const path = Application.resourcesPath(`adsense.json`);
    
    async function getAdClients() {
      const auth = new google.auth.GoogleAuth({
        keyFile: path,
        scopes: 'https://www.googleapis.com/auth/adsense.readonly',
      });
      const adsense = google.adsense({ version: 'v2', auth });
      try {
        const res = await adsense.accounts.adclients.list({
          parent: 'accounts/pub-xxxxxxxxxxxx'
        });
        console.log(res.data);
      } catch (err) {
        console.error('请求错误:', err);
      }
    }
    
  • 确认服务账户密钥文件有效性
    检查adsense.json是否是从Google Cloud控制台下载的完整密钥文件,确保文件包含正确的client_email、private_key等字段,未被篡改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:36:04