показать все авторизованные устройства и какую-то статистику по ним?
fingerprint
? Можно чуть больше 1 слова?
да никак. Для такого случая лучше использовать сессии, которые можно и прервать в любой момент
refresh-токены хранятся в базе. Это и есть история
это значительно сложнее и менее безопасно, случаи применения JWT ограничены
Так а как делается мгновенный deauth?
Ну при генерации токена, он привязывается к уиду устройства с которого был запрос, для получени уида браузера стандарт это либа fingerprintjs
Он не нужен, делайте токены пятиминутными
refresh делается невалидным (в базе его делаешь невалидным) - и юзер не сможет получить новую пару токенов при ротации
это не мгновенный deauth, валидные токены по прежнему валидны
access - короткоживущий токен. Он умирает очень быстро
А если совсем прям надо, тогда set невалидных токенов в любом быстром хранилище
очень быстро != мгновенно
https://t.me/gogolang/566352
вот я поэтому и не понимаю зачем всё так усложнять? 🙂 сомневаюсь что в данном бизнес кейсе десятки тысяч серверов и миллионы конкуретных клиентов чтобы оправдать JWT
Ну это трейдофф сложности реализации и требований к системе Не всем нужно, чтобы сессия была деактивирована сразу
Ну у меня права успешно влезают в jwt, и я не лазаю в базу.
Тогда должна быть сущность, которая умеет отвечать "токен валидный" и хранить этот set
То есть пришли к идее инвалидируемых токенов в итоге
любой токен валидный в котором не истёк вшитый срок годности
Инвалидируемый токен, это когда можно принудительно инвалидировать выданный токен, пока срок годности еще не вышел
а зачем в таком случае JWT? 😅 этот токен может быть простым идентификатором сессии. ведь в случае с JWT мы как раз не хотим ходить в storage проверять валиден ли токен или нет.
Я и не говорил нигде, что он там нужен 🙂
ну тогда это всего лишь старые добрые сессии
Так инвалидация как делается? )
Инвалидация сессии, привязанной к токену на сервере
Выглядит как кадавр: если у нас сессии, зачем тогда токен?
Замените “токен” на “id сессии”
Обсуждают сегодня