Oauth2 — реализовать автоматический выход из системы после XX минут бездействия

я использую bshaffer / oauth2-сервер PHP библиотека для реализации сервера oauth2.

В настоящее время я использую токен доступа для проверки подлинности при каждом запросе и токен обновления при истечении срока действия токена доступа, поэтому, если токен обновления не истек, сервер возвращает новый токен доступа. Если срок действия маркера обновления истек, возвращается следующая ошибка:
{«error»: «invalid_grant», «error_description»: «Срок действия маркера обновления истек»}
,и после этого на стороне клиента пользователь автоматически выходит из системы.

Я хочу реализовать стандартный «тайм-аут сеанса PHP» с Oauth2. Таким образом, мои токены будут недействительными через XX минут после последнего запроса (если в это время нет запросов), то есть я буду продлевать срок действия моих токенов по каждому запросу в течение XX минут.

Я хочу, чтобы время истечения токена обновления соответствовало моему последнему запросу, поэтому предыдущая ошибка будет возвращена через двадцать минут бездействия пользователя. Может кто-нибудь сказать мне, что является наилучшей практикой для реализации этого? Я думал посылать токен обновления в заголовке при каждом запросе и вручную продлевать срок его действия в базе данных, но не знаю, достаточно ли это безопасно.

Это то, что обрабатывается Oauth2, или не должно быть реализовано в системе, использующей вызовы API?

Кроме того, мне интересно, как этот случай может быть обработан в oauth2?

Заранее спасибо.

2

Решение

Это не так, как работает OAuth2.

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

0

Другие решения

Хотя не стоит делать то, что ты хочешь делать. Но есть два способа достижения функциональности выхода из системы:

  1. создайте пользовательское поле в маркере OAuth2 session_id = xyz. Теперь сохраните этот идентификатор сеанса в хранилище сервера с полями даты, такими как созданные, использованные. При каждом запросе обновляйте используемое поле. Как только вы получите запрос по истечении определенного времени неактивности, вы идете и проверяете в БД этот идентификатор сеанса, и если время истекло, инициируйте процесс выхода из системы и завершите все идентификаторы сеанса для этого пользователя / клиента и перенаправьте пользователя на страницу входа.
    1. При выдаче токена также создайте зашифрованный файл cookie, который клиент будет отправлять вместе с каждым запросом. В каждом запросе вы будете обновлять атрибут чтения cookie и отвечать на него. Если по истечении определенного времени запрос получен, вы можете расшифровать файл cookie и выяснить, нужно ли его отключить. Если это так, инициируйте процесс выхода из системы и обновите файл cookie с атрибутом expired / redirect на страницу входа.
    2. Комбинация вышеперечисленного может быть использована.
0

По вопросам рекламы [email protected]