服务应用程序和Google Analytics API V3:服务器到服务器的OAuth2身份validation?

我正在尝试让服务器应用程序定期从我自己的GA帐户中提取Google Analytics数据。 请注意,这是个人服务器端应用程序访问我自己的数据,即没有最终用户访问此应用程序。

因此,我在Google API Console中将应用程序注册为服务应用程序 ,该应用程序给了我一个客户端ID和一个私钥 。 我的理解是服务应用程序不使用应用程序秘密redirectURL,因为在此服务器到服务器身份validationstream程中没有最终用户。 事实上,Google API控制台并没有给我提供秘密,也没有提示我提供redirecturl。

不幸的是,我不知道如何在Google的PHP客户端API中validation我的服务应用程序。 有关于最终用户validationWeb应用程序的大量文档。

Google的文档表明可以通过使用私钥对JWT请求进行签名来validation服务器到服务器 。 我只是无法弄清楚如何在PHP客户端API中执行操作(尽pipe我已经浏览了源代码,并且确实有一个用私钥签名请求的脚本 )。

我在这里错过了什么? 如何使用我的私钥和Google PHP客户端API对服务应用程序执行身份validation?

编辑清晰

更新2012年7月21日

Google Analytics API V3现在支持由.p12签名的JWT请求返回的OAuth2令牌。 也就是说, 我们现在可以使用具有服务帐户的Analytics API

目前拉4年的日常指标, 只是为了它的地狱。

这是一个快速的“n”脏步骤:

  1. 转到Google API控制台并创build一个新的应用程序

  2. 在“ 服务”标签中,翻转Google Analytics(分析)开关

  3. API访问标签中,点击创build一个OAuth2.0客户端ID

    • input你的名字,上传一个标志,然后点击下一步

    • select服务帐户选项并按创build客户端ID

    • 下载你的私钥

  4. 现在你回到了API访问页面。 您将看到一个名为Service account的部分,其中包含一个客户端ID电子邮件地址

    • 复制电子邮件地址(类似####@developer.gserviceaccount.com

    • 访问您的GApipe理员 , 并将此电子邮件作为用户添加到您的媒体资源

    • 这是必须的; 否则你会得到神秘的错误。

  5. 通过Github获取最新的Google PHP客户端API

    git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only 
  6. Rock'n'roll(感谢所有关于更新课程名称的提示):

     // api dependencies require_once(PATH_TO_API . 'Google/Client.php'); require_once(PATH_TO_API . 'Google/Service/Analytics.php'); // create client object and set app name $client = new Google_Client(); $client->setApplicationName(APP_NAME); // name of your app // set assertion credentials $client->setAssertionCredentials( new Google_Auth_AssertionCredentials( APP_EMAIL, // email you added to GA array('https://www.googleapis.com/auth/analytics.readonly'), file_get_contents(PATH_TO_PRIVATE_KEY_FILE) // keyfile you downloaded )); // other settings $client->setClientId(CLIENT_ID); // from API console $client->setAccessType('offline_access'); // this may be unnecessary? // create service and get data $service = new Google_Service_Analytics($client); $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams); 

原来的解决办法如下


看起来,尽pipe文档含糊不清,但大多数Google API还不支持服务帐户 ,包括Google Analytics(分析)。 他们无法消化由.p12签名的JWT请求返回的OAuth2令牌。 因此,截至目前,您无法将Google Analytics API V3与服务帐户一起使用

解决方法:

  1. 在Google API控制台中 ,创build一个客户端应用程序。

  2. 按照Google PHP Client API示例中的步骤,使用您的client_idclient_secretredirect_uri生成client_auth_url

  3. 使用cURLlogin到Google 。 (请务必使用cookie文件!)

  4. 在cURL中打开client_auth_url并填写表单。 确保你设置了curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);curl_setopt($ch, CURLOPT_HEADER, 1); 因为authorization_code将位于响应的“ Location:标题中。

  5. 使用您的client_idclient_secretredirect_uri和第4步中的激活码,向Google的OAuth2令牌机发送请求。 确保你的post字段中包含grant_type = "authorization_code"

  6. 万岁,你现在有一个永不过期的refresh_token ,还有一个正在工作的access_token ! 当您的access_token过期并且您将得到一个新的请求时,请使用您的client_idclient_secretredirect_urirefresh_token向Google的OAuth2令牌机发送请求。

Google API PHP客户端现在支持中继上的服务帐户。

实现还没有发布,所以你需要检出最新版本的PHP客户端。

我准备了一个示例应用程序,演示如何使用服务帐户来击中Google Prediction API。 要查看示例,请查看examples / prediction / serviceAccount.php或访问: http : //code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount .PHP

如果您使用的是Google的PHP客户端API,请转至Google API控制台 ,然后点击左侧的API Access

然后Create a Client ID 。 这将给你的secret ,这是你设置你的redirect URL 。 它不会给你一个redirect的URL – 这是应用程序在authentication之后将用户返回的URL。

还有其他的validation方法,你可以看看。

您可以使用非常有用的php库GAPI (Google AnalyticsAPI PHP接口)来访问没有OAuth的Google Analytics。 这很容易使用。