使用服务帐户在 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 API:“用户对此帐户没有足够的权限。”
将 Google Analytics 360 链接到 Big Query,权限问题