Выбор ответа Senior Аутентификация обновлено

Ротация refresh-токена

Вопрос

Сервер делает ротацию refresh-токенов: при обмене выдаёт новый, а старый помечает использованным. Пришёл запрос с уже использованным refresh. Как правильно поступить?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

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

Варианты ответа

  1. Выдать новую пару: скорее всего, у клиента упала сеть и он просто повторил запрос
  2. Считать это возможной кражей и отозвать всю цепочку токенов сессии, потребовав входправильный ответ
  3. Вернуть 500, чтобы клиент повторил запрос позже уже со свежим refresh из своего хранилища
  4. Продлить старый refresh ещё на сутки и залогировать повтор как сетевую ошибку клиента

Разбор

Повторное использование значит, что токеном пользовались двое: настоящий клиент и, возможно, злоумышленник. Стандартная реакция (reuse detection) это отозвать всё семейство токенов. Чтобы не выкидывать честных пользователей при параллельных запросах, на клиенте делают single-flight обмена, а на сервере иногда дают короткое окно повторной выдачи. Тихо выдать новую пару значит наградить вора. 500 неверен по смыслу, а продление старого токена ломает саму идею ротации.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме