2013-09-05 4 views
0

Я использую Google api php client для проверки idToken, отправленного из приложения Android. Я проверка это так:Истекает срок годности токена

$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, но он не работает. Как это можно сделать?

ответ

0

Функция $client->getAccessToken() вернет json-закодированную строку, которая содержит не только токен доступа, но и временную метку, которая была создана, и ее продолжительность жизни. Так, чтобы получить временную метку истечения, просто добавить срок службы до времени создания, как это:

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

Если у вас уже есть маркер доступа и не знаю, когда она была создана, TokenInfo API получит вам идентификатор пользователя, оставшееся время (в секундах) до истечения срока действия, а также множество других сведений. Существует page on the Google Developers site, который объясняет это более подробно.

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); 
} 

Надеется, что это помогает!