редис ключом является uuid токенов(аксес и рефреш). Если делают запрос на логаут или рефреш, то удаляются оба uuid из редиса. Но вот теоретически допустим
1. кто-то украл рефреш токен. заюзал его и у него теперь новая пара токенов.
2. Потом юзер у которого украли рефреш токен пробует зайти на сайт -> токен не валиден -> делает рефреш -> рефреш тоже не валиден -> делается логаут, но этих токен uuid в редис уже нет.
то есть по сути токены хакера живут своей жизнью и он их может бесконечно обновлять, а токены юзера своей.
Второй вариант это использовать айди юзера как ключ в редис и значением будет все токены этого юзера. И тот же флоу
1. Хакер украл и обновил пару токенов
2. Юзер снова делает логаут(так как рефреш токен не валиден) и тут по ключу(айди юзера) в редисе стираются токены хакера.
Все как бы круто.
Но что делать, когда один и тот же юзер будет заходить и с компьютера и с телефона, тут уже две пары токенов на одного юзера?
Поправьте, если я где-то не правильно мыслю
На ум пришло только добавить что то вроде версии браузера или вариант платформы.Зависит от сервиса. НО это тоже геморой.
Не используйте jwt-авторизацию
В редис
а есть статья с примером?
https://www.sohamkamani.com/golang/session-based-authentication/
Я бы заюзал сессии.
то есть этот токен должен иметь очень маленькое время жизни
Редис вроде как в один поток.
ну если кто-то украл токен, то они оба могут его юзать?
А как он его украдет?
тогда по сути можно остаться на первом варианте, просто рефреш токен класть в хттп онли куки
Обсуждают сегодня