网站管理员API用户没有足够的网站权限

Jan*_*may 5 google-api google-webmaster-tools google-api-php-client

我使用google-api-php-client库来访问网站管理员工具数据.当我想列出站点地图时,它出现了致命错误:未捕获的异常'Google_Service_Exception'(403)用户没有足够的站点权限.另请参阅:https://support.google.com/webmasters/answer/2451999.' 我将服务帐户电子邮件地址添加为我的网站的限制用户,但错误仍然存​​在.

最后我找到答案:服务帐户不像普通的Google帐户.即使您将特定地址"访问",也无法使用它来访问特定资源.请参阅此处,了解您可以通过哪些方式授权您对网站站长API的请求.

Mar*_*vdB 20

对我来说,问题不是实际的权限,而是域名的传递方式。

您应该为您的域名添加前缀sc-domain:sc-domain:yourdomain.com。仅传递不带sc-domain:前缀的“yourdomain.com”将导致错误User does not have sufficient permission for site yourdomain.com

这是我的 Node.js 示例,但 PHP 也是如此:

import {JWT} from 'google-auth-library';

const client = new JWT(
    null,
    'service-account.json',
    null,
    ['https://www.googleapis.com/auth/webmasters.readonly'],
);
const res = await client.request({
    url: 'https://www.googleapis.com/webmasters/v3/sites/sc-domain:yourdomain.com/searchAnalytics/query',
    method: 'POST',
    data: {
        "startDate": "2020-04-01",
        "endDate": "2020-05-01",
        "dimensions": ["country", "device"]
    }
});

console.log(res.data);
Run Code Online (Sandbox Code Playgroud)

  • 真令人难以置信。我遇到了完全相同的问题,这解决了它。但是,对于其他域,它适用于“http://”加上域,而不是“sc-domain:”。看来,如果 Google Search Console 属性是旧式的,带有 http[s]://[www] 前缀,则需要使用 url,而如果它是“域”属性(协议所在的孩子)并且子域名都是统一的,并且您通过 DNS 验证所有权),那么您需要使用此解决方案。**您是如何找到这个的以及它的记录在哪里?** (3认同)

Dec*_*bal 3

服务帐户与常规 Google 帐户不同。即使您授予该特定地址“访问权限”,您也无法使用它来访问特定资源。

您需要通过站长管理来管理服务权限。添加您的服务帐户

随便@developer.gserviceaccount.com

那里。