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

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

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

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

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

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

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

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

Да, это всё подразумевает, что как минимум refresh-токен нужно хранить защищённым от XSS, то есть точно не в localStorage, а в куках или чём-то подобном.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Access token постоянно гуляет по проводам, перехватить его сравнительно легко и поэтому его часто меняют. Refresh token пересылается существенно реже, вторая линия обороны, глубокий тыл.)) Вот такая простая логика не годится? А так то взламывается всё...
Ответ написан
Soloist
@Soloist
программист 1С
Вот здесь JavaScript.Ninja подробно всё рассказывает. А конкретно на 13:30 он отвечает на вопрос "Какой смысл в refresh токене?"
Ответ написан
Ваш ответ на вопрос

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

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