服务应用程序和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”脏步骤:
-
转到Google API控制台并创build一个新的应用程序
-
在“ 服务”标签中,翻转Google Analytics(分析)开关
-
在API访问标签中,点击创build一个OAuth2.0客户端ID
-
input你的名字,上传一个标志,然后点击下一步
-
select服务帐户选项并按创build客户端ID
-
下载你的私钥
-
-
现在你回到了API访问页面。 您将看到一个名为Service account的部分,其中包含一个客户端ID和电子邮件地址
-
复制电子邮件地址(类似####@developer.gserviceaccount.com )
-
访问您的GApipe理员 , 并将此电子邮件作为用户添加到您的媒体资源
-
这是必须的; 否则你会得到神秘的错误。
-
-
通过Github获取最新的Google PHP客户端API
git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
-
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与服务帐户一起使用 。
解决方法:
在Google API控制台中 ,创build一个客户端应用程序。
按照Google PHP Client API示例中的步骤,使用您的
client_id
,client_secret
和redirect_uri
生成client_auth_url
使用cURLlogin到Google 。 (请务必使用cookie文件!)
在cURL中打开
client_auth_url
并填写表单。 确保你设置了curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
和curl_setopt($ch, CURLOPT_HEADER, 1);
因为authorization_code
将位于响应的“Location:
标题中。使用您的
client_id
,client_secret
,redirect_uri
和第4步中的激活码,向Google的OAuth2令牌机发送请求。 确保你的post字段中包含grant_type = "authorization_code"
。万岁,你现在有一个永不过期的
refresh_token
,还有一个正在工作的access_token
! 当您的access_token
过期并且您将得到一个新的请求时,请使用您的client_id
,client_secret
,redirect_uri
和refresh_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。 这很容易使用。