当前位置: 首页 > 面试题库 >

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

太叔航
2023-03-14
问题内容

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

因此,我在Google API控制台中将我的应用程序注册为
服务应用程序 ,这给了我一个 客户端ID 和一个 私钥 。据我了解,服务应用程序不使用 应用程序密钥
重定向URL, 因为此服务器到服务器的身份验证流程中没有最终用户。确实,Google API控制台没有给我任何秘密,也没有提示我输入重定向URL。

不幸的是,我不知道如何在Google的PHP Client API中对我的服务应用程序进行身份验证。有关于验证的Web应用程序广泛的文件 最终用户。

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

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

为清晰而编辑


问题答案:

更新2012年7月21日

Google Analytics API V3现在支持由.p12签名的JWT请求返回的OAuth2令牌。也就是说,
我们现在可以使用带有服务帐户的Analytics 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仍不支持服务帐户,包括Google
Analytics(分析)。它们无法消化由.p12签名的JWT请求返回的OAuth2令牌。因此,截至目前,您 不能将Google
Analytics(分析)API V3与服务帐户一起使用

解决方法:

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

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

  3. 使用cURL
    登录到Google。(请务必使用Cookie文件!)

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

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

6.您现在有一个refresh_token永不过期的工作台access_token!发布到请求谷歌的的OAuth2令牌机与你client_idclient_secretredirect_uri,和refresh_token当你的access_token到期,你会得到一个新的。



 类似资料:
  • 如何使用spring oauth2和DB实现资源服务器和身份验证服务器,以及如何使用以下模式:https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql 测试数据会很棒!!!

  • react中的前端 基于Spring Boot“resource-service”的后端服务 keycloak 其他后端服务(使用者) 前端和使用者服务都使用REST API与后端通信。我们使用Keycloak作为我们的用户管理和身份验证服务。 我们希望通过提供web应用程序和服务流来将基于Spring的服务“资源服务”与Keycloak集成: > 基于web application-react的

  • 问题内容: 我想构建一个Java应用程序来访问OpenStack服务,例如身份服务(用户名,密码,密钥等),Nova服务(创建和删除虚拟机等)和Swift服务(上传和下载文件等)。 我在三台机器上设置了OpenStack Cloud,并下载了Java SDK文件以从此链接https://github.com/woorea/openstack-java- sdk 访问云资源。 我需要简单的Java代

  • 它总是导致带有错误消息的catch块 登录失败:未知的用户名或错误的密码。失败:未知的用户名或错误的密码。 我确信给定的密码是正确的。 如何使用给定的密码验证用户名?

  • 我正在为我们的应用程序使用Spring boot Microservices体系结构。在我们的项目中,我们使用的是OAuth2、Jwt、Zuul和Eureka服务,我的疑问是,我是否需要将这些服务作为一个独立的服务来实现,或者我是否可以将所有服务开发成一个单一的应用程序。 如果我必须作为单个应用程序实现,那么更好的方法是什么。请澄清

  • 我正在构建一个自定义移动应用程序,它有一个客户端,自定义后端服务器(我正在构建),并与许多其他API交互。其中一个API是Microsoft Bookings。 我面临的问题是,我需要通过服务器对服务器进行身份验证,并使用共享的客户端秘密。我知道多发性硬化症有很多医生,但还没有找到解决办法。我想知道服务器到服务器是否可以预订。 我能够获得一个access_token服务器到具有这些权限的服务器。(