Наше текущее приложение использует сеансы HTTP, и мы хотели бы заменить его на JWT.
Установка разрешает только один сеанс для каждого пользователя. Это означает:
- User signs in at Device 1
- User is logged in at Device 1 (new Session created)
- User signs in at Device 2
- User is logged in at Device 2 (new Session created)
- Пользователь не вошел в систему на устройстве 1 (сеанс был уничтожен)
Это работает, потому что между идентификатором сеанса и идентификатором пользователя существует связь на стороне сервера.
Используя JWT, я мог представить, что в пользовательской базе данных есть какой-то счетчик, который увеличивается при каждом входе в систему, то есть:
- User signs in at Device 1
- JWT tokens signature contains counter+1 (and save new counter to database)
- User signs in at Device 2
- JWT's signature contains counter+1 and it gets increased and saved to db.
Теперь с каждым запросом я должен проверять, соответствует ли входящая подпись текущему значению счетчика.
Это каким-то образом делает его с сохранением состояния. :(
Но... одно из преимуществ JWT заключается в том, что нет необходимости обращаться к какой-либо базе данных или хранилищу сеансов для проверки токена.
Есть ли другое решение для предотвращения одновременных входов в систему? Может быть, что-то, что работает без доступа к базе данных и сохраняет ее без состояния?