我知道已经晚了,但是对于遇到这个的人来说。如果您使用的是 PHP 和 Google PHP 客户端,则需要在验证用户时将访问类型设置为离线:
$client->setAccessType("offline");
这将导致 Google 发回您为用户存储的刷新令牌。
然后,每次旧访问令牌过期时,您都可以使用此刷新令牌获取新的访问令牌:
$acess_token = $client->fetchAccessTokenWithRefreshToken($refresh_token);
在上面的检查中,我没有添加任何条件来查看旧的访问令牌是否确实已过期。但是上面返回一个数组,如果你检查它,你会看到它有一个名为“created”的键。谷歌似乎让访问令牌的有效期为 1 小时,因此您需要检查旧创建的时间,看看自那时以来是否已经将近一小时,然后运行该fetchAccessTokenWithRefreshToken()
方法。
或者,您可以使用$client->isAccessTokenExpired()
;
您可以在此处阅读有关此内容的更多信息:https ://developers.google.com/identity/protocols/oauth2/web-server#offline (有其他语言的示例)
更新:
有时不会仅仅因为您将访问类型设置为“离线”而发送刷新令牌。除了$client->setAccessType("offline");
始终确保取回刷新令牌之外,您还必须设置另一个属性
所以你会这样做:
$client->setAccessType("offline");
$client->setApprovalPrompt('force');
每次用户验证其帐户时始终获取刷新令牌。