Uncaught Google_Auth_Exception: ошибка при обновлении токена OAuth2 - PullRequest
0 голосов
/ 11 июля 2019

Я узнал от Google, когда искал об этой ошибке, что это связано с системным временем, не соответствующим NTP, или может быть превышен предел маркера обновления. Я попытался проверить системное время с помощью команды chronyc. кажется, все в порядке.

Я также пытался создать проект в консоли Google, чтобы заменить существующий ключ и службу, но я получаю ту же ошибку.

Ошибка:

Fatal error: Uncaught Google_Auth_Exception: Error refreshing the OAuth2 token, message: '{ "error": "invalid_grant", "error_description": "Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values and use a clock with skew to account for clock differences between systems." }' in /Google.ads/Auth/OAuth2.php:363 Stack trace: #0 /Google.ads/Auth/OAuth2.php(312): Google_Auth_OAuth2->refreshTokenRequest(Array) #1 /crontask.php(62): Google_Auth_OAuth2->refreshTokenWithAssertion(Object(Google_Auth_AssertionCredentials)) #2 {main} thrown in /Google.ads/Auth/OAuth2.php on line 363

Код для запуска задачи cron, которая должна аутентифицировать Google Analytics

<?php
opcache_reset();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


$url_to_replace = 'https://example.com';
$nonhttps_url = 'http://example.com';

$ga_limit = 5;
$ids = 'ga:XXXXXXXX';

$debug = 1;

include('../wp-load.php');


require_once ('Google.ads/autoload.php');

$client_id = 'XXXXXXXXXXXXXXXXXXXXXXX';
$service_account_name = 'XXXXXXXXXXXXXXXXXXXXXXX.iam.gserviceaccount.com';
$key_file_location = 'XXXXXXXXXXXXXXXXXXXX.p12';

//check if config are set correctly
if (!strlen($service_account_name) || !strlen($key_file_location)) {
echo missingServiceAccountDetailsWarning();
exit;
}

//google client object
$client = new Google_Client();
$client->setApplicationName("XXXXXXXXXXXXXXXX");

//google service object
$service = new Google_Service_Analytics($client);
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}


//get key
$key = file_get_contents($key_file_location);

//authenticate
$cred = new Google_Auth_AssertionCredentials(
$service_account_name, array('https://www.googleapis.com/auth/analytics'), $key
);

//update client object with credentials
$client->setAssertionCredentials($cred);

//token
if ($client->getAuth()->isAccessTokenExpired()) {

$client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();
echo $client->getAccessToken();exit;

enter image description here

Я попытался создать несколько учетных записей служб в консоли Google, чтобы заменить файл ключа, идентификатор клиента и имя учетной записи службы. Но даже для более новых ключей появляется та же самая ошибка.

Вы можете проверить информацию о системном времени, которую я проверял, используя хроник выше. Посоветуйте, пожалуйста, как это решить. Мне просто нужно прочитать данные из Google Analytics. Он не проходит через часть аутентификации.

У меня нет root-доступа к системе. Так что я не могу изменить время.

...