Обращаться с украденным JWT? - PullRequest
0 голосов
/ 25 октября 2018

Я создаю сервер nodejs с аутентификацией jwt.

В настоящее время срок действия моих jwts составляет 1 месяц.Если пользователь заходит на страницу входа в систему, я проверяю, содержит ли его запрос действительный jwt, если да, ему не нужно вводить свое имя пользователя и пароль.Если он выходит из системы, jwt удаляется на клиентской стороне, поэтому пользователь должен в следующий раз войти в систему со своими учетными данными.

Что делать, если злоумышленник прослушивает соединение (я уже использую ssl) и получаетзнакДаже если пользователь выйдет из системы и получит новый токен в следующем сеансе, злоумышленник может выдать себя за пользователя старым токеном, если он действителен, верно?

  1. ЭтоХорошая идея сохранить IAT «текущего» токена пользователя в БД и сравнить его с IAT токена в запросе, чтобы избежать доступа атакующего?

  2. Я знаю, 1 месяц - это довольно много для JWT.У меня также была идея сгенерировать новый токен, каждый раз, когда клиент входит в систему (со сроком действия 2 дня).Но если злоумышленник получает только 1 действующий токен, он также получает новые токены, не так ли?

У вас есть какие-либо предложения?

Спасибо, ура!

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Ваши опасения как раз и являются одной из причин, по которой сотрудники службы безопасности советуют не использовать JWT для данных сеанса - см. Раздел «Нельзя аннулировать отдельные токены JWT».Другими словами, единственный способ аннулировать токены JWT - принудительно выполнить поиск в базе данных при его представлении, но это в первую очередь наносит ущерб всей точке JWT (большинство людей используют их, потому что пытаются избежать поиска в базе данных).на сервере).

0 голосов
/ 25 октября 2018

Сохраните токены и любые данные сеанса (например, идентификатор пользователя для вошедшего в систему пользователя) на сервере.Это дает вам полный контроль над данными и сессиями.Это также устраняет множество способов злоупотребления (что позволяет стандарт JWT).

При этом, если вы знаете, что токен украден, вы можете просто пометить его как недействительный на вашем сервере и получить ваше приложение.игнорируйте его.

На практике это означает просто наличие токена в файле cookie и сохранение идентификатора пользователя и других данных сеанса в таблице базы данных или в кэше на стороне сервера (например, в таблице mysql или кэше redis)..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...