当前位置: 首页 > 知识库问答 >
问题:

Google Analytics API oauth异常“invalid_grant”与服务帐户。两台服务器上的代码相同。只有一台有效

朱昊乾
2023-03-14

我正在通过服务帐户查询分析API。

我已经在开发服务器上编写了代码,它没有问题。在正式服上运行相同的代码时,它会抛出以下内容:

Google_AuthException:刷新OAuth2令牌时出错,消息:{"error":"invalid_grant"}'

我尝试创建另一个服务帐户,其行为与此相同。

oAuth IETF草案(https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-31)有关错误的说明如下:

     invalid_grant
           The provided authorization grant (e.g. authorization
           code, resource owner credentials) or refresh token is
           invalid, expired, revoked, does not match the redirection
           URI used in the authorization request, or was issued to
           another client.

这是我编写的代码:

$GA_CLIENT_ID = 'XX.apps.googleusercontent.com';
$GA_APP_EMAIL = 'XX@developer.gserviceaccount.com';
$GA_APP_NAME = 'XX';
$GA_KEY_FILE = 'XX';

// create client object and set app name
$client = new Google_Client();
$client->setApplicationName($GA_APP_NAME); // name of your app

// set assertion credentials
$client->setAssertionCredentials(
        new Google_AssertionCredentials(
            $GA_APP_EMAIL, // email you added to GA
            array('https://www.googleapis.com/auth/analytics.readonly'),
            file_get_contents($GA_KEY_FILE)  // keyfile you downloaded
            ));

// other settings
$client->setClientId($GA_CLIENT_ID);           // from API console
$client->setAccessType('offline_access');  // this may be unnecessary?

// create service and get data
$service = new Google_AnalyticsService($client);
$result = $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams);
return $result;

我还尝试了这里建议的解决方案(https://groups.google.com/forum/?fromgroups#!主题/gs讨论/3y\u 2XVE2q7U[1-25]),使用authenticatedRequest()代替Google\u AnalyticsService:

$req = new Google_HttpRequest($apiUrl);
$resp = $client::getIo()->authenticatedRequest($req);
$result = json_decode($resp->getResponseBody(), true);

此替代方案也适用于开发服务器,但不适用于生产服务器。

在这一点上我完全不知道。有人看到/修复了吗?

谢谢

共有3个答案

艾令雪
2023-03-14

除了Valer的回答之外:

首先,如果尚未安装NTP,则需要安装它。对于Debian或Ubuntu,这将是以下命令:

sudo apt-get install ntp

对于Redhat或CentOS,您需要使用这个:

yum install ntp

如果通过npt进行同步。ubuntu。com不工作请尝试:

sudo ntpdate pool.ntp.org

资源

>

https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-12-04

江鹏
2023-03-14

如果使用错误的“ServiceAccountId”,也可能导致无效的授权。它应该是与google API访问页面中服务帐户客户端id中的客户端id关联的电子邮件。您还必须将此用户添加到您计划访问的google analytics帐户。

这让我大吃一惊,因为我假设他们所指的电子邮件地址就是我的google帐户的电子邮件地址,因为我使用的是与我在google analytics中使用的相同的google帐户来访问api。我知道Vir已经解决了他的问题,我想我应该加上这个,以防其他人遇到同样的问题,像我一样,他们的计算机似乎与NTP同步。

韩季
2023-03-14

显然,问题是系统关闭的时间。通过NTP与以下对象同步:

<罢工>

sudo ntpdate池。ntp。组织机构

正如@RafaSashi在下面建议的,pool.ntp.org服务器更可靠。使用它代替ntp.ubuntu.com(这是我尝试的第一个工作方法,因此是最初的选择)。

 类似资料:
  • 我正在使用谷歌服务帐户将MySQL备份从我们的网络服务器推送到谷歌云端硬盘,使用谷歌API PHP客户端脚本设置为cron作业。 我现在想在多个网络服务器上运行相同的脚本,我不知道如何正确配置服务号,应该吗? > 是否在所有服务器上使用相同的服务帐户和服务帐户密钥/凭据? 或者使用相同的服务帐户,但为每个服务器添加服务帐户密钥/凭据? 还是为每台服务器设置单独的服务帐户?

  • 我试图使用服务帐户同步日历从Dynamics CRM软件到谷歌。在此期间,我面临着缺乏关于google API for.NET的文档,尤其是关于授权的文档。由于使用了过时的库和类,大多数Google示例甚至无法编译。 所以我发现了一些关于实习和接收错误的例子。谁能看看我的样品,告诉我哪里做错了? 准备步骤: 我在我的私人Google帐户中创建了一个项目。 在project developer控制台

  • 问题内容: 我有带有git存储库的家庭服务器。现在,我正在尝试在现有的PHP存储库上配置Jenkins。 我已经正常安装了Jenkins,但是在创建Job时出现错误: 储存库网址= /home/git/repositories/testing.git 错误如下: 无法连接到存储库:命令“ git ls-remote -h /home/git/repositories/testing.git HEA

  • null null 谢谢你的回答。

  • 我试图在Android Studio中制作一个基本的注册/登录应用程序。我正在使用php和Web服务器。我有两个php文件,Register.php和Login.php所以我想注册一个用户,并将输入的信息存储在mysql服务器中。当我在Android应用程序中输入信息并按注册按钮我得到这个错误: 这是我的登记簿。php文件 这里是活动的java文件: 我已经为此工作了几个小时,所以请帮助我。

  • 问题内容: 我需要将Jenkins 2.32版从服务器A移至Jenkins 2.72.1服务器B。两台服务器均具有ubuntu 16.04.3,由于内存问题,我无法安装任何插件,也无法在服务器A中使用该插件。有什么办法可以实现这一目标? 问题答案: 将目录中的所有文件复制到新服务器。 将新服务器指向新目录。 将Jenkins war文件(或servlet容器设置,如果有的话)复制到新机器上并启动它