【问题标题】:How to make Google reporting API refresh the oauth2 access token when it expires?如何让 Google 报告 API 在 oauth2 访问令牌过期时刷新它?
【发布时间】:2018-09-17 18:22:17
【问题描述】:

我正在处理一个分析 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

【问题讨论】:

    标签: php oauth-2.0 google-oauth google-analytics-api


    【解决方案1】:

    所以,经过大量的挖掘和修补,我终于让它工作了。我一直看到对

    的引用
    $client->setAccessType('offline'); 
    

    $client->setApprovalPrompt('force');
    

    解决了我的问题,但它们对我不起作用。事实证明,它们需要添加到 oauth2callback.php,而不是任何其他报告或管理文件。这是欺骗性的,因为其他文件也在操纵 $client 对象。我终于在 $_SESSION['access_token'] 中收到了一个 refresh_token,它现在似乎正在自行处理刷新,没有任何进一步的操作。

    【讨论】:

      【解决方案2】:

      您只会在第一次授权时获得刷新令牌。您可能需要取消对应用的授权,然后重试。您可以将 RT 存储在您喜欢的任何地方,只要它是安全的。要使用您的 RT 获取访问令牌,请参阅https://developers.google.com/identity/protocols/OAuth2WebServer#offline

      【讨论】:

      • 我试过几次取消对应用程序的授权,但都没有成功。如果正确接收,刷新令牌是否应该在 $_SESSION[access_token] 中?
      猜你喜欢
      • 1970-01-01
      • 2018-04-07
      • 2012-11-30
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2021-11-16
      相关资源
      最近更新 更多