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

Google Api Php客户端的刷新令牌

范翰海
2023-03-14

我正在使用谷歌API客户端访问谷歌分析。我想在离线模式下访问数据,所以我需要一个刷新令牌。如何获取refresh_token?

共有2个答案

勾炳
2023-03-14

对于 Google Client v2 的 PHP SDK:

php composer.phar require google/apiclient:^2.0

您可以尝试使用PHP代码刷新accessToken,如下所示:

<?php

require_once __DIR__ . '/vendor/autoload.php';

define('CLIENT_SECRET_PATH', __DIR__ . '/client_secret.json');
define('SCOPES', implode(' ', array(
  Google_Service_Analytics::ANALYTICS_READONLY)
));

$client = new Google_Client();
$client->setApplicationName('YOUR APPLICATION NAME');
$client->setScopes(SCOPES);
$client->setAuthConfig(CLIENT_SECRET_PATH);
$client->setAccessType('offline');

// Input AccessToken from such as session or database 
$accessToken = json_decode('YOUR CURRENT ACEESS TOKEN');

$client->setAccessToken($accessToken);

// Refresh the token if it's expired.
if ($client->isAccessTokenExpired()) {
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
    // Get RefreshToken as json which can be reused
    $refreshToken = json_encode($client->getAccessToken());
}

此外,如果您希望在服务器端应用程序中保持现有行为,则需要将approvel_prompt设置为force,否则可能会从getRefreshToken()返回NULL,而Google文档没有提到:

$client->setApprovalPrompt('force');

将即将到来的更改提交给OAuth 2.0endpoint

吴均
2023-03-14

尝试使用以下代码:

    <?php
        require_once 'apiClient.php';

        const REDIRECT_URL = 'INSERT YOUR REDIRECT URL HERE';
        const CLIENT_ID = 'INSERT YOUR CLIENT ID HERE';
        const CLIENT_SECRET = 'INSERT YOUR CLIENT SECRET';
        const ANALYTICS_SCOPE = 'https://www.googleapis.com/auth/analytics.readonly';

        // Build a new client object to work with authorization.
        $client = new apiClient();
        $client->setClientId(CLIENT_ID);
        $client->setClientSecret(CLIENT_SECRET);
        $client->setRedirectUri(REDIRECT_URL);
        $client->setScopes(array(ANALYTICS_SCOPE));
        $client->setAccessType('offline');
        $auth = $client->authenticate();


        if ($client->getAccessToken()) {
           $token = $client->getAccessToken();
           $authObj = json_decode($token);
           $refreshToken = $authObj->refresh_token;
        }
        ?>
 类似资料:
  • 我正在开发一个angularjs网络应用。 要访问服务器端api,我需要添加一个id_token头,并通过使用接收id_token。 问题的关键是——id_token有一个过期日期。在访问服务器应用编程接口之前,我需要确保id_token还没有过期,但是如果是,显而易见的选择是刷新它。 有没有办法刷新id_令牌? 我知道我可以将访问类型更改为脱机,并接收刷新令牌,但请求脱机访问似乎很奇怪,而在我的

  • 我的SPA应用程序使用以下体系结构(来源): 这假设我的客户端应用程序知道刷新令牌,因为如果没有用户凭据(例如电子邮件/密码),我需要它来请求新的访问令牌。 我的问题:在客户端应用程序中,刷新令牌存储在哪里?关于这个话题有很多问题/答案,但是关于刷新标记,答案并不清楚。 访问令牌和刷新令牌不应存储在本地/会话存储器中,因为它们不是存放任何敏感数据的地方。因此,我会将访问令牌存储在一个cookie中

  • 下一个问题是如何刷新获得的访问令牌? 我试图使用下面的命令这样做,但我得到了“访问此资源需要完全身份验证”。在我获得新的刷新令牌后,我可以使用刷新令牌再次刷新我的新访问令牌吗? 谢谢。

  • 引用的员额: 为什么OAuth v2既有访问令牌又有刷新令牌? 刷新令牌有什么意义?

  • 我想知道如何使用混合流刷新IdentityServer4客户端中的访问令牌,它是使用ASP构建的。NET核心MVC。 如果我正确理解了整个概念,客户端首先需要拥有“离线访问”范围,以便能够使用刷新令牌,这是启用短期访问令牌的最佳实践,并且能够撤销刷新令牌,防止向客户端颁发任何新的访问令牌。 我成功地获得了一个访问令牌和一个刷新令牌,但是我应该如何处理MVC客户端中访问令牌的实际更新过程呢? Ope

  • 问题内容: 我们目前正处于非公开Beta测试阶段,因此仍在进行相当快速的更改,尽管显然随着使用量的增加,我们将放慢这个过程。话虽这么说,我们遇到的一个问题是,在我们推出新JavaScript文件的更新后,客户端浏览器仍然使用文件的缓存版本,而他们看不到更新。显然,在技术支持电话上,我们可以简单地通知他们进行刷新以确保他们从服务器获取最新文件,但是最好在此之前进行处理。 我们当前的想法是将版本号简单

  • 我有一个客户端,它监听配置服务器。配置服务器指向github。使用localhost时一切正常。然而,当我将应用程序部署到Kubernetes时,用于刷新属性的客户端endpoint无法正常工作。 endpoint(后):http://config-client.sbx.com/actuator/refresh 这将在Postman“[]”上返回一个空响应,响应代码为200 OK。我能够看到配置服

  • 我有一个配置服务器,一个Spring Boot2.3.1应用程序连接到该服务器,为正确的配置文件加载配置属性。 配置服务器使用git获取每个应用程序和配置文件的配置文件。 这工作正常,当Spring Boot应用程序启动时,它将从配置服务器加载属性的正确值。 当我在配置文件中更新一个值并将其推送到git中,然后对Spring Boot应用程序的endpoint执行操作时,我会看到返回一个json,