刷新oauth2令牌google api和HWIOAuthBundle

时间:2016-11-10 08:48:38

标签: php symfony google-api google-api-php-client hwioauthbundle

我如何刷新令牌? 我使用带有此令牌的Google api - 它可以工作但无法找到如何刷新它,在这个例子中我们不保存过期时间。 我需要

`access_type:     offline `

然后

$client = new Google_Client();
        //$client->setClientId($GoogleClientId);
        $client->setApplicationName($GoogleAppName);
        $client->setClientId($this->user->getGoogleId());
        $client->setAccessType('offline');

如果令牌有效我可以工作但是当过期时我会尝试

$token = [
            'access_token' => $this->user->getGoogleAccessToken(),
            'expires_in'   => (new \DateTime())->modify('-1 year')->getTimestamp(),
        ];

我把它放在任何日期,因为在这个例子中我们不保存过期时间

https://gist.github.com/danvbe/4476697

    $client->setAccessToken($token);

    if($client->isAccessTokenExpired()){

        $refreshedToken = $client->refreshToken($client->getAccessToken());

这里我有错误

array:2 [▼
  "error" => "invalid_request"
  "error_description" => "Could not determine client ID from request."
]

有HwiAuthBundle方法来刷新令牌吗? 为什么这不适用于Google_Client刷新?

2 个答案:

答案 0 :(得分:1)

在oauth2.0中刷新过期的访问令牌,您需要发送到端点:

  • 授权类型等于' refresh_token'
  • 有效的refreshToken
  • your clientId
  • 和您的clientSecret

您无法发送过期的accessToken以获取新刷新的accessToken。

public function refreshAccessToken($refreshToken, array $extraParameters = array())
{
    $parameters = array_merge(array(
        'refresh_token' => $refreshToken,
        'grant_type' => 'refresh_token',
        'client_id' => $this->options['client_id'],
        'client_secret' => $this->options['client_secret'],
    ), $extraParameters);
    $response = $this->doGetTokenRequest($this->options['access_token_url'], $parameters);
    $response = $this->getResponseContent($response);
    $this->validateResponseContent($response);
    return $response;
}

function refreshAccessToken( $ refreshToken ,...

而非$ accessToken

我认为您需要在使用凭据构建客户端后调用

$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->refreshToken($client->getRefreshToken());

https://developers.google.com/api-client-library/php/auth/web-app#creatingcred

您确定自己是$client->setClientId($this->user->getGoogleId());吗? 什么是getGoogleId()?我认为您还需要创建一个oauth客户端ID: https://developers.google.com/identity/sign-in/web/devconsole-project

在oauth中,client_id不是用户ID,而是应用ID

答案 1 :(得分:-2)

很抱歉让您失望,但看起来该软件包并没有实现任何刷新令牌功能。或者它留给你。

这是GitHub中的未解决问题,请查看:https://github.com/hwi/HWIOAuthBundle/issues/457

以下是该问题的评论:

  

此功能存在,但您可以根据需要轻松使用   一切都在你自己(处理存储更多关于令牌的细节,   检测到期,调用Google获取新令牌,以及   替换旧的,现在只有这个包的帮助,它的代码   允许您向Google索取新的新令牌:   GenericOAuth2ResourceOwner :: refreshToken(),它应该工作   预期,但我很久没有使用这个包=)

那里的人们正在等待Gist(代码片段)向他们展示如何做到这一点,但到目前为止还没有。