Не понимаю, как. Отправляем запрос за смену пароля с предварительно сгенерированным фингерпринтом, получаем токен в почте, отправляем его с тем же фингерпринтом.
1. Генерируем фингерпринт
2. Отправляем его вместе с email пользователя
3. Сервер генерирует jwt с id из таблицы сбросов паролей. Токен может протухнуть
4. Фингерпринт записываем в память с ключем id таблицы сброса паролей и ttl = время жизни токена
5. Отдаём ответ
6. Отправляем письмо, где ссылка на ресурс сброса пароля + /?key=jwt
1. Кто-то получает доступ к почте пользователя
2. Переходит по ссылке, получает фингерпринт, вводит новый пароль и отправляет его
4. Сравниваем фингерпринты и понимаем что кто-то пытается сбросить пароль из другого браузера
Важно понимать что фингерпринт может блочиться плагинами браузера и его опенсорсную версию нужно дописывать, она не идеальна