Какой смысл в refresh токене?

Никак до конца не пойму, зачем все же нужны refresh токены.

Допустим, злоумышленник украл у нас acess token, который живет очень мало, скажем 15 минут. Ок, ему удастся недолго им попользоваться, а мы имея refresh token получим новый access token. С этим все понятно и логично.

Но что будет, если злоумышленник также украдет refresh token? И здесь я ничего не понимаю. Во-первых, почему если он украл access token, то у него нет возможности украсть и refresh token? Или большинство злоумышленников слишком глупые, увидев access token сразу пускают слюни и забывают, что им на самом деле нужен рефреш?

Если же злоумышленник украдет refresh token, он сможет им также пользоваться до его истечения, постоянно получая новую пару. Все говорят, что при логине пользователя, refresh token злоумышленника станет невалидным. Получается нам надо хранить его где то в хранилище и при каждом новом логине удалять? Ок, тогда как при логине не разлогиниваться на других устройствах, если нам надо удалить все рефреш токены?

Вообщем помогите разобраться с этой абракадаброй ;)
  • Вопрос задан
  • 2218 просмотров
Пригласить эксперта
Ответы на вопрос 4
@deliro
Агрессивное программирование
Но что будет, если злоумышленник также украдет refresh token?

Не украдёт. JWT может быть не-httpOnly, чтобы его мог читать фронтенд. Следовательно, JWT можно украсть через XSS-дырку. refresh token должен быть всегда httpOnly и читать его может только сервер.

Второй уровень защиты — JWT ставится на .example.com, в то время как refresh токен ставится только на auth.example.com. Таким образом, даже если любой из твоих сервисов (кроме сервиса авторизации) будет скомпрометирован, refresh токен останется защищённым, т.к. не будет доступен никому кроме сервиса авторизации.

Да, это всё подразумевает, что как минимум refresh-токен нужно хранить защищённым от XSS, то есть точно не в localStorage, а в куках или чём-то подобном.
Ответ написан
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Access token постоянно гуляет по проводам, перехватить его сравнительно легко и поэтому его часто меняют. Refresh token пересылается существенно реже, вторая линия обороны, глубокий тыл.)) Вот такая простая логика не годится? А так то взламывается всё...
Ответ написан
@ivorobioff
Software Engineer
вообще хороший вопрос, я кстати им тоже недавно задавался и толком не могу понять на сколько велика от него польза. Проблема еще вот в чем, что если к примеру на фронте у нас есть токен который вот вот истечет, следовательно мы хотим его обновить, а сделать это можно только сделав запрос на бэкэнд с этим старым токеном. Следовательно, получается что даже если мы прячем рефреш токен где-то на бэкэнде мы все равно даем злостным парням возможность обновить старый токен и использовать его сколько надо не парясь что срок на него истечет, ведь его можно опять обновить.

Единственное, что я понимаю, что будет еще хуже если мы забьем на рефреш токен вообще, и сделаем обычный токен бессрочным. Так получится что обычный токен как бы открытый и рано или поздно он попадет в злые руки, что даст им возможность войти в систему. С другой стороны, имея рефреш токен дает возможность задавать обычному токену определенный срок годности, и если токен попадет в руки злоумышленника когда срок истечет, то это не даст возможность им войти в систему или обновить старый токен.

Получается что рефреш токен хоть и не полностью защищает от всего, но и без него хуже будет.
Ответ написан
Soloist
@Soloist
главный программист 1С
Вот здесь JavaScript.Ninja подробно всё рассказывает. А конкретно на 13:30 он отвечает на вопрос "Какой смысл в refresh токене?"
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
PeoplePass Москва
от 100 000 до 200 000 руб.
PeoplePass Москва
от 100 000 до 250 000 руб.
PeoplePass Москва
от 100 000 до 250 000 руб.