Google Apps и лучшие практики OAuth

Я работаю над интеграцией Google Apps в свое PHP-приложение. У меня уже есть система входа в систему, которая назначает идентификатор сеанса пользователю (после ввода имени пользователя и пароля), который сохраняется в базе данных, когда пользователь входит в систему. Идентификатор сеанса становится недействительным после определенного времени бездействия (настраивается пользователем , может быть 5 минут, 15, 60...). Этот идентификатор сеанса передается в URL-адресе, чтобы проверить, вошел ли пользователь в систему. При выходе идентификатор сеанса удаляется из базы данных.

Я позволяю людям входить в систему с помощью Google, сохраняя их идентификатор Google в базе данных, когда они входят в систему, я запрашиваю токен доступа, запрашиваю информацию о пользователе, проверяю, есть ли идентификатор Google в базе данных, и если да, то назначаю сеанс ID этому пользователю.Поскольку я хочу иметь возможность запрашивать другие API, я также сохраняю токен доступа json в базе данных. Когда пользователь выходит из системы, токен доступа также удаляется из базы данных.

Это работает, мои пользователи могут входить в систему, используя свою учетную запись Google, и я могу запрашивать API, используя сохраненный access_token, однако некоторые вещи кажутся неуклюжими и заставляют меня чувствовать себя неуверенно в моем рабочем процессе:

  • Если вы принудительно_одобряете, вы получаете a refresh_token, я чувствую, что должен использовать этот токен обновления, чтобы получить новый токен доступа, вместо того, чтобы удалять старый из базы данных и вводить новый, когда пользователь снова входит в систему. С другой стороны, при входе в систему я еще не знаю, кто это, поэтому я не знаю, какой токен обновления использовать. Возможно, я неправильно понимаю, для чего нужен токен обновления. Кроме того, я действительно не хочу каждый раз принудительно утверждать, поэтому я даже не могу использовать refresh_token в этом случае.

  • Как было сказано ранее, пользователи могут определять, как долго будет длиться их сеанс, однако срок действия google access_token всегда истекает через 3600 секунд. Было бы действительно глупо, если бы пользователи работали час в системе, а после этого API Google внезапно терпел неудачу, заставляя их снова входить в систему. На игровой площадке Google OAuth отображается флажок «Автоматическое обновление токена до истечения срока его действия», но я не вижу, как это сделать. Должен ли я использовать токен обновления здесь? Или просто запросить новый токен в фоновом режиме (если я не форсирую утверждение)?

  • В настоящий момент я использую запрос userinfo (https://www.googleapis.com/oauth2/v2/userinfo), чтобы найти идентификатор пользователя, но я также могу использовать информацию о маркере (https://www .googleapis.com/oauth2/v1/tokeninfo).Tokeninfo не указан на игровой площадке oauth, но результат показывает, как долго токен остается действительным (однако я также могу рассчитать это самостоятельно). Является ли одно предпочтительнее другого?

  • Я сохраняю весь объект json в базе данных (access_token, id_token, expires_in и token_type), но я чувствую, что мое приложение будет работать отлично, если я буду хранить только access_token (единственная проблема, которую я предвижу, это изменение времени expires_in) . Нужно ли мне хранить id_token, например?

Мне иногда очень не хватает документации Google (на сайте developer.google.com). Если кто-то знает какие-либо другие хорошие источники информации, они меня тоже интересуют.

5
задан Bram 9 March 2012 в 13:30
поделиться