0

我正在使用Google api php 客户端来验证从 android 应用程序发送的 idToken。我正在以这种方式验证它:

$client = new Google_Client();
if (isset($token)) {
   $client->setClientId("xxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com");

   try{
            $userId = $client->verifyIdToken($token)->getUserId();
  }catch(Exception $e){
      ...

然后Google_Client类调用Google_OAuth2类,其中验证实际上是在方法中完成的verifySignedJwtWithCerts

我不仅想获得 userId,还想获得令牌的到期时间戳。我虽然可能会在 Google_OAuth2 中创建一个方法来获取它,然后在 Google_client 中调用 Google_Oauth2 中的第一个方法,但它没有用。怎么可能做到?

4

1 回答 1

0

$client->getAccessToken()函数将返回一个 json 编码的字符串,其中不仅包含访问令牌,还包含它创建的时间戳及其生命周期。因此,要获取过期时间戳,只需将生命周期添加到创建的时间,如下所示:

$access_tokens=json_decode($client->getAccessToken());
$expiration_timestamp=$access_tokens->created+$access_tokens->expires_in;

如果您已经拥有访问令牌并且不知道它是何时创建的,TokenInfo API 将为您获取用户 ID、到期前的剩余时间(以秒为单位)以及许多其他信息。Google Developers 网站上有一个页面对此进行了更详细的解释。

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={access_token}

你可以试试这个:

$token_info=tokenInfo("{access token here}");

$user_id=0;
$expiration_timestamp=0;

if(!isset($token_info->error)){
    $user_id=$token_info->user_id;
    $expiration_timestamp=time()+$token_info->expires_in;
}

function tokenInfo($access_token){
    $url="https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=".$access_token;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output);
}

希望这可以帮助!

于 2014-03-20T23:50:36.697 回答