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

与刷新令牌续订后的访问令牌相同

暨弘懿
2023-03-14
$OAUTH2_CLIENT_ID = 'XXXXX';
$OAUTH2_CLIENT_SECRET = 'XXXXX';
$client = new Google_Client();
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
    FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
$service = new Google_Service_YouTube($client);                            
if (isset($_GET['code'])){
    $accessToken = $client->fetchAccessTokenWithAuthCode($_GET['code']);
    $client->setAccessToken($accessToken);
    $test=$client->getAccessToken();    
    //TEST REFRESH TOKEN
    print_r($test);
    sleep(10);
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
    $test=$client->getAccessToken();
    print_r($test);                                                         
  }    

// Check to ensure that the access token was successfully acquired.
if ($client->getAccessToken()) {
 ... 
  foreach ($files as $file){    
      if ($client->isAccessTokenExpired()) {
         $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
         file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
       } // end if token expired                                     
  ====CALL YOUTUBE API HERE IN FOREACH LOOP ===
  }// end foreach files

这是获得访问代码后测试代码的结果,因此可以看到'new'访问令牌与上一个类似,并且我已经尝试在setaccesstoken()和fetchAccessTokenWithRefreshToken()的参数上使用encode_json。没有得到错误但结果仍然一样...

数组([access_token]=>YA29.GLVQBUGBFZDQN3E8HWD4WFSBB0HLHSYVGZPBE0BOJUB4IEN5PCSOGQXLKEYOU7MEVDLOGOWBUAKTYAUVF2BKXNWZXX[expires_in]=>3600[refresh_token]=>1/KEGJY2T9KTNWCXK-ZTMTSZPSS2XL4XX[scope]=>https://www.googleapis.com/auth/YouTube[token_type]=>Bearer

数组([access_token]=>YA29.GLVQBUGBFZDQN3E8HWD4WFSBB0HLHSYVGZPBE0BOJUB4IEN5PCSOGQXLKEYOU7MEVDLOGOWBUAKTYAUVF2BKXNWZXX[expires_in]=>3600[refresh_token]=>1/KEGJY2T9KTNWCXK-ZTMTSZPSS2XL4XX[scope]=>https://www.googleapis.com/auth/YouTube[token_type]=>Bearer

谢谢你

共有1个答案

陶璞
2023-03-14

访问令牌在一小时后过期,这就是它们的工作方式。访问令牌过期后,应运行代码并获取新的访问令牌。在新的访问令牌过期之前获取该令牌将导致相同的访问令牌。

您的访问令牌是在created(tip epoch converter)添加3600(seconds)时创建的,以找出它何时过期。

1552891085 <--- Monday, March 18, 2019 6:38:05 AM

我能看到的代码中唯一的错误是获取了访问令牌,但没有实际使用它。auth2authentication.php

function getOauth2Client() {
    try {

        $client = buildClient();

        // Set the refresh token on the client. 
        if (isset($_SESSION['refresh_token']) && $_SESSION['refresh_token']) {
            $client->refreshToken($_SESSION['refresh_token']);
        }

        // If the user has already authorized this app then get an access token
        // else redirect to ask the user to authorize access to Google Analytics.
        if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {

            // Set the access token on the client.
            $client->setAccessToken($_SESSION['access_token']);                 

            // Refresh the access token if it's expired.
            if ($client->isAccessTokenExpired()) {              
                $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
                $client->setAccessToken($client->getAccessToken()); 
                $_SESSION['access_token'] = $client->getAccessToken();              
            }           
            return $client; 
        } else {
            // We do not have access request access.
            header('Location: ' . filter_var( $client->getRedirectUri(), FILTER_SANITIZE_URL));
        }
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}
 类似资料:
  • 我不熟悉,它代表。我混淆了它的两个术语:访问令牌和刷新令牌。 用户注册/登录站点后,我创建和。 将刷新标记保存在数据库或cookie中。 15分钟后,用户标记访问令牌过期。 如果用户空闲2小时,我将从cookie或DB中删除刷新令牌,否则我将使用刷新令牌续订访问令牌。 有什么优化的方法可以达到这个目的吗?

  • 我有一个基于OAuth2的授权服务器。与访问令牌一起发送的还有刷新令牌。 我可以使用访问令牌获得一个资源,当它过期时,我使用刷新令牌请求一个新的资源。 不过,我也可以用刷新令牌获取资源...是Oauth2的典型行为吗?我以为这个刷新令牌只用于请求新的访问令牌,而不是用于获取受保护的资源。 多谢了。

  • 我已经阅读了JWT和访问令牌和刷新令牌。我知道您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。 我不清楚三件事: 谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期?(显然刷新令牌也需要过期,尽管需要更长的时间才能过期)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。在某些情况下(移动应用)

  • 这是我的身份验证流程: 用户登录后收到两个令牌(具有过期时间的访问令牌和没有过期时间的刷新令牌) 对于每个用户,刷新令牌存储在数据库中名为refreshTokens的json列中(这是一个数组) 在客户端,访问令牌和刷新令牌都存储在本地存储器上 当需要验证用户时,如果访问令牌过期,将使用刷新令牌创建一个新的访问令牌,并将其发送回用户并保持用户登录 当用户注销时,数据库中存储的刷新令牌(在refre

  • null 很抱歉太啰嗦了。 提前谢了。

  • 我在同意的情况下为我的应用程序手动/php sdk创建了docusignjwt访问令牌,并在restapi的代码中使用了该访问令牌。访问令牌的到期时间为1小时。如何在不征求同意的情况下一次又一次地更新DocuSign jwt访问令牌?或者如何延长访问令牌的到期时间?