使用服务帐户在 Google Analytics API 中未经授权的假冒用户

Posted

技术标签:

【中文标题】使用服务帐户在 Google Analytics API 中未经授权的假冒用户【英文标题】:Impersonated User unauthorized in Google Analytics API, using Service Account 【发布时间】:2016-06-25 16:53:40 【问题描述】:

我正在使用 Google 的 php API 客户端,版本 1.1.6。

我们有一个公司 Google 帐户,它控制着我们的许多 Google Analytics 帐户以及我们的 Google Developer 应用程序。

我正在开发一个使用服务帐户设置访问我们的 Google Analytics(分析)的应用。我正在使用此处提供的相同代码:

https://developers.google.com/api-client-library/php/auth/service-accounts#delegatingauthority

$credentials = new Google_Auth_AssertionCredentials(
    $client_email,
    $scopes,
    $private_key,
    'notasecret',                                 
    'http://oauth.net/grant_type/jwt/1.0/bearer',
    $user_to_impersonate,
);

在这种情况下,$client_email 是应用服务帐户客户端 (random-chars@developer.gserviceaccount.com),$user_to_impersonate 是我们公司的 Google 帐户。

几天前一切正常,经过上述身份验证后,我可以通过 API 访问我们所有的 Google Analytics 帐户。截至昨天,我收到此错误:

Error refreshing the OAuth2 token, message: '
  "error" : "unauthorized_client",
  "error_description" : "Unauthorized client or scope in request."
'

删除 $user_to_impersonate 参数后,经过身份验证的作品没有错误。但是,我一直在使用 $user_to_impersonate,因为我们有数百个 GA 帐户,并且服务帐户客户端不是它们的允许用户(无论如何,限制为 200 个帐户)。

我找不到任何关于 Google Dev 身份验证工作方式的最新更新,但也许我遗漏了一些东西。

有什么想法吗?

更新:显然这是 Google 整体 API 的一个临时错误,现已修复: https://github.com/google/google-api-php-client/issues/891

更新 2:毕竟不是临时问题。此处列出了解决方案(如果其他人需要)。基本上让您的应用程序永久访问给定的帐户/范围。 https://github.com/google/google-api-php-client/issues/801#issuecomment-171417538

【问题讨论】:

【参考方案1】:

Google 可能更改了服务帐户的处理方式,但现在不再起作用了。它与特定的 Google API 客户端 (PHP) 或特定的 API (Analytics) 无关,但在我看来,它是影响一切的普遍变化。

【讨论】:

以上是关于使用服务帐户在 Google Analytics API 中未经授权的假冒用户的主要内容,如果未能解决你的问题,请参考以下文章

Google Analytics:更新多个帐户

Google Analytics API:“用户对此帐户没有足够的权限。”

Google Analytics - 第三方访问帐户授权

将 Google Analytics 360 链接到 Big Query,权限问题

使用多个 Google Analytics 帐户进行跨子域跟踪。

Analytics PHP 接口 (GAPI) 用户模拟