PankovAlxndr
@PankovAlxndr
Fullstack web developer

Как обновлять токены авторизации для нескольких устройств?

Здравствуйте, подскажите по логике авторизации по access\refresh токенам для нескольких устройств одного пользователя? не могу понять как инвалидировать украденные токены и не навредить реальному клиенту?
у меня есть ход мыслей и он такой

нагуглил такой ответ, но не понял его Какая верная стратегия обновления refresh_token'а для нескольких устройств?

- access_token (user_id + fingerptint) - в базе его не храним, в нагрузке идентификатор клиента и его устрйокста
- refresh_token - храним вместе с user_id, fingerprint, exp_at

1) В базе у нас есть таблица
user_id, fingerprint, refresh_token, exp_at
те строка соответствия id юзера, какого-то ключа устройства (фингерпринт) и сам рефреш-токен с датой валидности

2) злоумышленник украл наши токеныи шлет запрос на обновление токена (шлет ведь сразу оба токена?)
из access_token мы получаем (user_id + fingerprint), хоть он и просрочен
смотрим рефреш токен в базе
те ищем строку user_id + fingerprint + refresh_token
есть такая строка (логин нашего настоящего клиента ее туда поместил)

3) для злоумышленника генерируем новый аксес-токен и новый рефреш-токен обновляем в бд запись
user_id + fingerprint + refresh_token
злоумышленник всем этим прекрасно пользуется неограниченное время

4) наш пользователь аналогично пользуется своим аксес-токен, но он у него заканчивается и он шлет запрос обновления

5) мы в базе ищем его рефреш токен
user_id + fingerprint + refresh_token
и не находим, так как его обновил наш злоумышленник со соим фингерпринт, используя ранее украденные токены

6) соответсвенно клиента кидаем на авторизацию, он логинится и получает свои 2 токена, а злоумышленник продолжает пользоваться токенами. Приложение думает что просто клиент наш авторизован с 2ух устройств сразу и все в норме

В итоге мы имеем доступы у всех и с точки зрения приложения все прекрасно, я понимаю что можно в ЛК клиента сделать вкладку "Ваши сессии" и выводить все кроме текущей, чтобы он мог сам из удалить и закрыть доступ у злоумышленника, он если он украл один раз все его токены, то украдет и второй раз

Что-то я н понимаю, подскажите пожалуйста где ошибка?
  • Вопрос задан
  • 403 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
При использовании refresh-токен помечается в базе как использованный. При попытке повторно использовать тот же токен удаляются все refresh-токены пользователя и запрашивается логин/пароль.
Refresh-токен удаляется из базы после истечения срока его жизни.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы