Как заставить API отчетов Google обновлять токен доступа oauth2 после его истечения? - PullRequest
0 голосов
/ 17 сентября 2018

Я работаю над проектом API аналитики, и когда через час истекает срок действия токена доступа, я получаю «код: 401, недействительные учетные данные» и мне нужно отключить сеанс php, чтобы иметь возможность повторной аутентификации.Я прочитал, что я должен получить токен обновления автоматически при первой авторизации, но я его нигде не вижу.Я также попытался установить токен обновления вручную, получив его с игровой площадки oauth2.Как я могу сделать эту работу?Должен ли токен обновления изначально сохраняться в $ _SESSION?

Код, о котором идет речь:

require_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/client_secrets.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');
$client->setAccessType('offline');        
$client->setApprovalPrompt('force');
$client->setIncludeGrantedScopes(true);   
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);

if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
  $client->setAccessToken($_SESSION['access_token']);
  $analytics = new Google_Service_Analytics($client);

} else {
  $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

Токен доступа в $ _SESSION

[access_token] => blahblahblah
[expires_in] => 3600
[scope] => https://www.googleapis.com/auth/analytics.readonly
[token_type] => Bearer
[created] => 1537207944

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Итак, после долгих копаний и поворотов я наконец-то начал работать.Я продолжал видеть, что

$client->setAccessType('offline'); 

и

$client->setApprovalPrompt('force');

являются решением моей проблемы, но они не работали для меня.Оказывается, их нужно добавить в oauth2callback.php, а НЕ в любые другие файлы отчетов или управления.Это было обманчиво из-за того, что другие файлы также манипулировали объектом $ client.Я наконец-то получил refresh_token в $ _SESSION ['access_token'], и теперь он, похоже, обрабатывает обновления самостоятельно, без каких-либо дальнейших действий.

0 голосов
/ 17 сентября 2018

Вы получите токен обновления только при первой авторизации.Возможно, вам придется деавторизовать ваше приложение и повторить попытку.Вы можете хранить RT где угодно, при условии, что это безопасно.Чтобы использовать свой RT для получения токена доступа, см. https://developers.google.com/identity/protocols/OAuth2WebServer#offline

...