Как устроена пара access и refresh токенов и зачем она нужна?
Аутентификация и сессии
Access-токен даёт доступ к API и живёт недолго, refresh-токен живёт дольше и нужен только для получения нового access-токена.
Зачем два
Если access-токен украден, он быстро перестаёт работать (обычно 5–15 минут). Долгоживущий refresh-токен отправляется редко и только на один эндпоинт, поэтому поверхность атаки меньше.
Как это работает
- Пользователь входит, сервер выдаёт пару токенов.
- Клиент отправляет access в
Authorization: Bearer .... - Сервер отвечает
401, когда срок истёк. - Клиент вызывает
/auth/refreshс refresh-токеном и получает новую пару. - Если refresh тоже недействителен, пользователь входит заново.
Хорошие практики
- Ротация: при каждом обновлении выдаётся новый refresh, старый перестаёт работать.
- Обнаружение повторного использования старого refresh-токена: это сигнал кражи, все токены семьи отзываются.
- На клиенте одновременные запросы с истёкшим токеном объединяют в один вызов refresh, чтобы не плодить обновления.
Коротко для собеседования
Короткий access снижает ущерб от кражи, а refresh с ротацией позволяет не просить пароль снова. Повторное использование refresh-токена означает компрометацию.