Как правильно использовать refresh token на разных устройствах?
Подскажите пожалуйста, при авторизации на клиенте в куках сохраняется два токена один из них access другой refresh,
при истечении срока access токена, клиент отправляет refresh и сервер выдает клиенту два новых токена, дело в чем, дело в том что если пользователь войдет с другого устройства например с телефона, то refresh токен на первом устройстве уже будет невалиден. Refresh токен хранится в БД таблице users, в таблице поля: email, password, refresh_token. То есть при авторизации на другом устройстве поле refresh_token обновится и на первом устройстве refresh токен который в куках уже невалиден. Как сделать так чтобы можно было использовать refresh токен, не только на одном устройстве?
Видел, что нужно делать что-то с идентификатором устройства, но не понял, так же не понял откуда взять этот идентификатор устройства. Буду благодарен если подробно опишете как правильно организовать данный процесс.
Для правильного вопроса надо знать половину ответа
Каждое устройство - отдельный клиент и получает свою пару токенов. В отдельную таблицу базы пишутся записи (id_пользователя, refresh_токен, время_окончания_токена, статус).
При запросе обновления если этот токен отмечен в базе как использованный, то все токены клиента удаляются из базы как скомпрометированные и возвращается требование аутентификации по логину/паролю.
Если токен просрочен или его нет в базе, то возвращается требование аутентификации по логину/паролю.
Если токен есть в базе и ещё не использован, то токен отмечается как использованный и выдаётся новая пара токенов.
Периодически из базы удаляются токены с истёкшим сроком действия.
Rsa97, правильно ли я понимаю что в БД должна быть отдельная таблица к примеру tokens, в ней есть поля id_пользователя, refresh_токен, время_окончания_токена, статус и при запросе обновления проверяется есть ли такой токен в бд и использован ли он или нет? И еще, а можно ли сделать без статуса? То есть при запросе на обновление токена, проверить токен и если он валиден, то выдать новые два токена, новый рефреш записать в таблицу, а старый удалить из таблицы и тогда можно сделать это и без статуса, или так нельзя? Спасибо!
gacbhp, Использованный токен должен некоторое время находиться в таблице. Иначе возможен вариант, что злоумышленник первым его использует, а сервер не обнаружит этой ситуации, потому что уже удалил токен и просто требует от клиента полной аутентификации.