【问题标题】:Webmasters API User does not have sufficient permission for site网站管理员 API 用户没有足够的网站权限
【发布时间】:2015-01-22 02:34:59
【问题描述】:

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

终于找到了答案: 服务帐户与普通的 Google 帐户不同。 您不能使用它来访问特定资源,即使您授予特定地址“访问”权限也是如此。请参阅here,了解您可以授权对 Webmaster API 的请求的不同方式。

【问题讨论】:

  • 我在使用 nodejs 时遇到了同样的问题 - 在一段曾经可以工作的代码上

标签: google-api google-api-php-client google-search-console


【解决方案1】:

对我来说,问题不在于实际的权限,而在于域名的传递方式。这是我的 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);

注意语法 sc-domain:yourdomain.com。传递 'yourdomain.com' 将导致错误 User does not have sufficient permission for site yourdomain.com

【讨论】:

  • 难以置信。我有完全相同的问题,这解决了它。但是,对于其他域,它适用于“http://”加上域而不是“sc-domain:”。看来,如果 Google Search Console 属性是老式的,带有 http[s]://[www] 前缀,则需要使用 url,而如果它是“域”属性(协议所在的孩子和子域都是统一的,并且您通过 DNS 验证所有权),那么您需要使用此解决方案。 您是如何找到这个的?它记录在哪里?
  • @matteo 不确定,我想我在某处看到了一些使用这种表示法的示例代码。很确定这不是文档...
  • @matteo 我找到了相关的文档,developers.google.com/webmaster-tools/…
【解决方案2】:

服务帐户不同于普通的 Google 帐户。即使您授予特定地址“访问”权限,您也不能使用它来访问特定资源。

您需要通过Webmaster Admin管理服务权限。添加您的服务帐号

whatever@developer.gserviceaccount.com

那里。

【讨论】:

  • 谢谢。我不知道我是怎么错过的,但这确实起到了作用。我最初认为“仅”拥有与服务帐户关联的主要用户的权限就足够了,但显然这还不够。所以再次感谢这个提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
相关资源
最近更新 更多