0

Использование клиента Google API PHP с учетной записью службы, он возвращает массив вроде следующего:Можно ли повторно использовать токен доступа к учетной записи службы Google?

array (size=3) 
    'access_token' => string '...TOKEN...' (length=127) 
    'token_type' => string 'Bearer' (length=6) 
    'expires_in' => int 3600 

это лучше практика, чтобы создать новый маркер запроса на каждой странице? Кажется расточительным это делать, когда каждый токен действителен в течение одного часа. Но поскольку токен не включает значение created или значение token_id, встроенный метод isAccessTokenExpired() всегда будет возвращать true, что означает, что он всегда истек.

Я вижу несколько вариантов повторного использования и тот же маркер:

Вариант 1: Когда маркер создается с помощью fetchAccessTokenWithAssertion(), можно вручную добавить значение created в маркере массив с time() в качестве значения. Затем сохраните это для сеанса/базы данных, а затем, когда вызывается isAccessTokenExpired, оно будет иметь это поле для проверки.

Вариант 2: сохранить токен в сеанс/базу данных вместе с временной меткой, срок действия которой истек (time() + $token['expires_in']), а затем на последующих представлениях я могу выполнить свои собственные вычисления, чтобы убедиться, что токен все еще находится в допустимом периоде времени. Это кажется немного странным, хотя, поскольку я не могу быть полностью уверен, что Google не отозвал токен или что-нибудь смешное.

Вариант 3: Вызвать метод, который использует токен доступа и проверяет его ответ. Если вызов преуспел, то токен доступа должен быть хорошим, если нет, то я могу пойти вперед и попросить новый. Но какой метод я мог бы назвать? Тот, кому нужны только самые основные разрешения, будет хорошим.

спасибо.

ответ

1

может запрашивать новый токен каждый раз, но это лишние накладные расходы, и я считаю, что он может поесть в вашу квоту API-вызовов.

Я в основном делаю # 2, но я также вычитаю 10 секунд от expires_in, чтобы быть уверенным, что у меня нет запроса с маркером с истекшим сроком действия. TBH нет никакой причины, что Google отменил бы индивидуальный токен, который не привел бы к полному аннулированию всего доступа, вот почему их токен жизни настолько короток для начала.

Я не использовать официальный клиент API, но версия утесе Заметки моей логики:

class Token { 
    public function __construct($info) { 
     $this->token = $info['access_token']; 
     $this->type  = $info['token_type']; 
     $this->expiry = time() + $info['expires_in'] - 10; 
    } 

    public function isValid() { 
     return ($this->validFor()) > 0; 
    } 

    public function validFor() { 
     return $this->expiry - time(); 
    } 
} 

class TokenFactory implements TokenFactoryInterface { 
    public function token($force_new=false) { 
     if($force_new || !isset($this->token) || !$this->token->isValid()) { 
      $this->token = $this->newToken(); 
     } 

     return $this->token; 
    } 
} 
+0

Спасибо за ваш ответ и подтверждающие мои мысли @sammitch. Именно это я и решил сделать сейчас. Я просто сохраняю токен вместе с истечением срока в сеансе PHP. – Corey

 Смежные вопросы

  • Нет связанных вопросов^_^