Как обнаружить украденный токен обновления при ротации токенов обновления?
Мне удалось реализовать аутентификацию с помощью токенов jwt на основе токена доступа, токена обновления и RTR (ротация токена обновления). Он просто следует всем правилам:
- Токены подписаны JWT, у обоих есть свой секрет (один для доступа, один для обновления)
- Токены устанавливаются в файлах cookie httpOnly с безопасным параметром, поэтому XSS и «Человек посередине» предотвращаются.
- Токен обновления установил путь только к конечной точке для обновления токенов, поэтому он не отправляется при каждом запросе.
- RTR включен, и при каждом обновлении токен обновления заносится в черный список в БД, а новые токены доступа и обновления отправляются обратно.
- Токены CSRF используются на маршрутах, которые вставляют/удаляют/обновляют БД для предотвращения атак.
Теперь единственная проблема, которую я вижу, это что делать, когда кто-то крадет токен обновления. Если кто-то действительно украдет его, он может отправить его на мою конечную точку обновления, а затем он внесет этот украденный токен в черный список и получит себе новую пару действительных токенов, которые можно использовать неограниченное время. Поскольку я не хочу отслеживать сеансы и пользователей (именно поэтому я использую аутентификацию без сохранения состояния). Как я могу обнаружить украденный токен обновления? Должен ли я как-то отслеживать токены обновления в БД? Как кто-то может даже украсть токен обновления?