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

moo*_*wer 60 php google-api google-analytics-api oauth-2.0 jwt

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

因此,我在Google API控制台中将我的应用程序注册为服务应用程序,该应用程序为我提供了客户端ID私钥.据我所知,服务应用程序不使用应用程序密钥重定向URL,因为此服务器到服务器身份验证流程中没有最终用户.实际上,Google API控制台没有给我任何机密,也没有提示我提供重定向网址.

不幸的是,我无法弄清楚如何在Google的PHP客户端API中验证我的服务应用程序.有关于验证的Web应用程序广泛的文件最终用户.

Google的文档表明,可以通过使用私钥对JWT请求进行签名来验证服务器到服务器.我只是无法弄清楚如何在PHP客户端API中做(虽然我浏览了源代码,但肯定有一个脚本用私钥签署请求.)

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

编辑清晰

moo*_*wer 107

更新于2012年7月21日

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

目前正在拉动4年的日常指标,只是为了它的地狱.

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

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

  2. 在" 服务"标签中,翻转Google Analytics开关

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

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

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

    • 下载你的私钥

  4. 现在,您将返回API Access页面.您将看到一个名为Service account的部分,其中包含客户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
    
    Run Code Online (Sandbox Code Playgroud)
  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);
    
    Run Code Online (Sandbox Code Playgroud)

 

原始解决方法如下


尽管文档模糊不清,但大多数Google API似乎还不支持服务帐户,包括Google Analytics.他们无法消化由.p12签名的JWT请求返回的OAuth2令牌.因此,截至目前,您无法将Google Analytics API V3与服务帐户配合使用.

解决方法:

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

  2. 请按照下列步骤谷歌PHP客户端API的例子来生成client_auth_url使用client_id,client_secretredirect_uri

  3. 使用cURL 登录Google.(务必使用cookie文件!)

  4. 打开client_auth_urlcURL并填写表格.请确保您设置curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);curl_setopt($ch, CURLOPT_HEADER, 1);authorization_code 将在Location:响应的头.

  5. 用你的client_id,client_secret,redirect_uri从第4步,激活代码,发布到请求谷歌的的OAuth2令牌机.确保包含grant_type = "authorization_code"在帖子字段中.

  6. 华友世纪,你现在有一个refresh_token永不过期的工作access_token!发布到请求谷歌的的OAuth2令牌机与你client_id,client_secret,redirect_uri,和refresh_token当你的access_token到期,你会得到一个新的.

  • @ rohan-patel将`require_once'路径添加到/ src/Google/autoload.php';`. (3认同)
  • @dubbe单击上面的链接后,选择一个帐户,转到_Users_选项卡,然后按_New User_按钮. (2认同)