【问题标题】:Google Oauth 2.0 Token Expire TimeGoogle Oauth 2.0 令牌过期时间
【发布时间】:2019-07-22 14:07:08
【问题描述】:

首先,我使用的是来自该站点https://github.com/google/google-api-php-client的 Google OAuth 2.0 代码

我需要找出令牌在此 oauth 目录中的哪个位置过期并将您注销。我在使用刷新令牌时遇到问题,通常令牌会在 1 小时内过期并引发错误,但每次我进行更改以查看代码是否有效时,我都无法等待 1 小时。我已将代码中的一些时间设置更改为 10 或 60 秒,但它们什么也没做。请让我知道哪个文件以及我可以在哪里更改令牌过期的时间并注销已登录的用户。

谢谢,

我添加了以下代码,因为问题出在此处,此 get 函数的某些内容未更新/使用刷新令牌。我怎样才能更好地编写这段代码。

    $service = new Google_Service_Oauth2 ($client);

    if ($client->getAccessToken()) {
        //For logged in user, get details from google using access token
        $user = $service->userinfo->get();
        $user_id = filter_var($user['id'],FILTER_SANITIZE_SPECIAL_CHARS);
        $user_name = filter_var($user['name'], FILTER_SANITIZE_SPECIAL_CHARS);
        $first_name = filter_var($user['given_name'], FILTER_SANITIZE_SPECIAL_CHARS);
        $last_name = filter_var($user['family_name'], FILTER_SANITIZE_SPECIAL_CHARS);
        $email = filter_var($user['email'], FILTER_SANITIZE_EMAIL);
        // $profile_url = filter_var($user['link'], FILTER_VALIDATE_URL);
        $profile_image_url = filter_var($user['picture'], FILTER_VALIDATE_URL);
        $gender = filter_var($user['gender'], FILTER_SANITIZE_SPECIAL_CHARS);
        // $personMarkup = "$email<div><img src='$profile_image_url?sz=50'</div>";
        $_SESSION['upload_token'] = $client->getAccessToken();
    }

【问题讨论】:

    标签: oauth-2.0 single-sign-on token google-oauth google-php-sdk


    【解决方案1】:

    无法更改 Google 的访问令牌到期时间。但是,如果令牌已过期或在 30 秒后过期,Google_Client::isAccessTokenExpired() 方法将返回 true。您的代码不应该只在令牌失败后处理更新令牌,而是可以检查访问令牌是否已过期之前它将调用具有该特定访问令牌的任何方法。

    仍然存在一个边缘情况:您可以通过手动撤销访问令牌(应用的带外)来模拟这种情况:

    curl https://accounts.google.com/o/oauth2/revoke?token=<access_token>
    

    然后运行/测试仍然保留现在已撤销的访问令牌的代码。已撤销或过期(“invalid_token”)的访问错误码相同,处理方式也一样。

    【讨论】: