使用服务帐户

时间:2016-03-10 17:33:28

标签: google-api google-analytics-api google-api-php-client

我正在使用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 个答案:

答案 0 :(得分:-1)

谷歌可能已经改变了服务帐户的处理方式,这已不再适用了。它与特定的Google API客户端(PHP)和特定的API(Analytics)无关,但在我看来这是一个影响所有内容的一般性更改。