RefreshToken 在我获得新的令牌 Google Sheets API 后没有发回

2024-05-10

我正在使用带有 PHP 的 Google Sheets API,并遵循可以在此处找到的快速入门指南https://developers.google.com/sheets/quickstart/php https://developers.google.com/sheets/quickstart/php

当我正确授权并将以下 json 文件存储在指定路径中时

{
  "access_token": "xxxxxxx",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "xxxxxx",
  "created": 1472731452
}

过期后,我的代码中会触发以下内容

if ($client->isAccessTokenExpired()) {
    $client->fetchAccessTokenWithRefreshToken(
        $client->getRefreshToken()
    );

    $this->filesystem
        ->put(
            self::CREDENTIALS,
            json_encode($client->getAccessToken())
        );
}

现在我的问题是,当该代码被触发时,它会将我的文件更新为如下所示。

{
  "access_token": "xxxxxxx",
  "token_type": "Bearer",
  "expires_in": 3600,
  "created": 1472731452
}

如您所见,不再有刷新令牌。当此令牌过期时,我开始收到以下错误

[LogicException]
refresh token must be passed in or set as part of setAccessToken

这是完全可以理解的,因为我不再有刷新令牌了。

我的问题是为什么刷新令牌被删除?我被称为与快速入门指南中的方法相同的方法https://developers.google.com/sheets/quickstart/php https://developers.google.com/sheets/quickstart/php

我在指南中专门谈论这部分

// Refresh the token if it's expired.
if ($client->isAccessTokenExpired()) {
  $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
  file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
}

Your 刷新令牌已过期 https://bshaffer.github.io/oauth2-server-php-docs/grant-types/refresh-token/因为您的代码中设置的寿命仅为 3600 秒/1 小时。

{
"access_token": "xxxxxxx",
"token_type": "Bearer",
"expires_in": 3600, //refresh_token good for 1 hour
"refresh_token": "xxxxxx",
"created": 1472731452
}

使用刷新令牌 https://developers.google.com/identity/protocols/OAuth2WebServer#refresh

离线场景下首次授权码交换时获取刷新令牌。在这些情况下,您的应用程序可以通过向 Google OAuth 2.0 授权服务器发送刷新令牌来获取新的访问令牌。

要以这种方式获取新的访问令牌,您的应用程序将发送 HTTPS POST 请求到https://www.googleapis.com/oauth2/v4/token https://www.googleapis.com/oauth2/v4/token。请求必须包含以下参数:

此类请求将类似于以下内容:

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=8819981768.apps.googleusercontent.com&
client_secret={client_secret}&
refresh_token=1/6BMfW9j53gdGImsiyUH5kU5RsR4zwI9lUVX-tqf8JXQ&
grant_type=refresh_token

检查这个所以线程 https://stackoverflow.com/questions/10827920/not-receiving-google-oauth-refresh-token以供额外参考。 希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RefreshToken 在我获得新的令牌 Google Sheets API 后没有发回 的相关文章

随机推荐