Service Applications and Google Analytics API V3:服务器到服务器 OAu


Service Applications and Google Analytics API V3: Server-to-server OAuth2 authentication?

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

因此,我在 Google API 控制台中注册了我的应用程序即服务应用程序,它为我提供了客户端 ID私钥。我的理解是,服务应用程序不使用应用程序机密重定向 URL,因为此服务器到服务器身份验证流中没有最终用户。事实上,Google API 控制台没有给我任何秘密,也没有提示我输入重定向 URL。

不幸的是,我不知道如何在谷歌的PHP客户端API中验证我的服务应用程序。有大量关于向最终用户验证 Web 应用程序的文档。

Google的文档表明,可以通过使用私钥签署JWT请求来验证服务器到服务器。我只是不知道如何在PHP客户端API中执行操作(尽管我已经浏览了源代码,并且肯定有一个脚本可以使用私钥签署请求。

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

为清楚起见进行了编辑

> 2012年7月21日更新

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

目前正在拉动 4 年的逐日指标,只是为了它。

这是一个快速的"n"肮脏的一步一步:

  1. 转到 Google API 控制台并创建一个新应用

  2. "服务">选项卡中,翻转"Google Analytics">开关

  3. API 访问选项卡中,单击创建 OAuth2.0 客户端 ID

    • 输入您的姓名,上传徽标,然后点击下一步

    • 选择服务帐户选项,然后按创建客户端 ID

    • 下载您的私钥

  4. 现在,你返回到">API 访问"页。你将看到一个名为">服务帐户"的部分,其中包含客户端 ID电子邮件地址

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

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

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

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

    git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
    
  6. 摇滚乐(感谢大家关于更新类名的提示(:

    // 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);
    

 

下面的原始解决方法


看起来,尽管文档模棱两可,但大多数Google API都这样做 尚不支持服务帐号,包括谷歌分析。他们 无法消化由 .p12 签名的 JWT 请求返回的 OAuth2 令牌。所以 截至目前,您不能将Google Analytics API V3与 服务帐户

解决方法:

  1. 在谷歌 API 控制台中,创建一个客户端应用。

  2. 按照 Google PHP 客户端 API 示例中的步骤生成client_auth_url,使用您的client_idclient_secret、 和redirect_uri

  3. 使用 cURL 登录谷歌。(请务必使用 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 发布请求 令牌机。确保在帖子字段中包含grant_type = "authorization_code"

  6. 万岁,你现在有一个永不过期的refresh_token,和一个工作access_token!向谷歌的OAuth2令牌发布请求 机器与您的client_idclient_secretredirect_uri、 并refresh_token当您的access_token到期时,您将获得 新的。

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

该实现尚未发布,因此您需要签出最新版本的 PHP 客户端。

我准备了一个示例应用程序,演示了如何使用服务帐户来访问 Google 预测 API。要查看示例,请查看示例/预测/服务帐户.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的地方。它不会为您提供重定向 URL - 即应用在身份验证后将用户发送回的 URL。

您可以查看其他身份验证方法。

您可以使用

非常有用的PHP库GAPI(Google Analytics API PHP接口(在没有OAuth的情况下访问Google Analytics。它易于使用。