Google Drive API刷新令牌 - 这是使用php客户端库进行身份验证的正确方法吗?

时间:2013-08-22 15:46:16

标签: google-drive-api google-oauth

我一直在搜索php库,以找出在第一次初始oAuth请求后进行永久身份验证的最佳方法。

下面的代码似乎工作正常,但我的问题是关于

$client->refreshToken($refresh_token);

编辑:我读了一些代码,这似乎不是正确的方法。我在调用setAccessToken时尝试使用刷新令牌,但这也无效。这是在任何地方记录的吗?

这是设置刷新令牌的正确方法吗?这个令牌会过期吗?

<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

$client_id = 'CLIENT ID';
$client_secret = 'CLIENT SECRET';
$refresh_token = 'REFRESH TOKEN';

$client = new Google_Client();

// Get your credentials from the APIs Console
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri('http://redirecturl.com');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$client->setAccessType('offline');
$client->refreshToken($refresh_token);
?>

1 个答案:

答案 0 :(得分:1)

我相信你的呼吁:

$client->refreshToken($refresh_token);

是生成您向Google发送另一个访问令牌的HTTP请求的原因。它没有设置刷新令牌。

您需要存储访问令牌&amp;刷新您在第一次请求时获得的数据库或会话中的令牌。 Google发布了有限的刷新令牌。

这里有一些关于如何评估你的令牌是否已经过期的代码(第三个答案):

How to refresh token with Google API client?

一旦您的访问令牌过期(1小时),您就拨打:

$client->refreshToken($refresh_token);

并存储生成的新访问令牌&amp;到期数据。你基本上每小时重复一次这个过程。

作为一个FYI:从理论上讲,刷新令牌“永不”过期。我在自己的编码中发现这不是真的。经过长时间没有访问谷歌API(周末),我已经陷入了恐惧:

{
"error": "invalid_token",
"error_description": "Invalid Value"
}

我发现我必须通过消除访问权限来解决这个问题。刷新令牌(重置会话或数据库),并进行编程调用以撤销过期的访问令牌(ruby)。

GET 'https://accounts.google.com/o/oauth2/revoke?token=' + access_token

然后,您必须从头开始重新启动整个OAuth2流程。希望这个问题不会困扰你,因为它有我!