Я пытаюсь реализовать функции регистрации и входа в систему, и я использую Spring Boot и стек Java. Я следую этому руководству (вам не нужно нажимать на него, просто поставьте здесь для справки и полноты этого вопроса).
Spring Security MySQL JWT Tutorial - Grokonez
Теперь у меня есть конечная точка для регистрации и входа в систему. После регистрации и добавления пользователя в базу данных я вхожу в систему. Для конечной точки входа я получаю токен jwt. Используя этот токен, я могу получить доступ к ограниченным ресурсам. До сих пор все отлично. Теперь, когда я снова попадаю в конечную точку входа, я получаю еще один токен.
Вот где моя дилемма. Поскольку у меня два токена, я могу войти в систему, используя два токена. Теперь, конечно, у обоих этих токенов есть срок годности (например, как день). Но с точки зрения хорошей практики, должны ли мы аннулировать старый токен, означая, что в любой момент времени будет только ОДИН токен, который любой пользователь может использовать для входа в нашу систему?
Если это так, будет ли это означать, что пользователь не может использовать наше приложение одновременно на обоих устройствах, таких как ноутбук и мобильный телефон? В таком случае, каков верхний предел для токенов active?
Я слышал кое-что о токене обновления и т. д., Но я просто хочу, чтобы это было просто, и меня устраивает наличие только одного токена, называемого токеном доступа.
Итак, если вы думаете, что я должен аннулировать jwt и оставить только один активный jwt для каждого пользователя в любой момент времени, как я могу это сделать? Хранить jwts в db и что-то делать?




Если вы собираетесь хранить токен JWT в базе данных, то нет смысла использовать токен JWT. Поскольку основная причина наличия автономного подписанного токена - избежать проверки базы данных при доступе пользователя к приложению.
Я могу предложить ниже способ избежать создания нескольких активных токенов.
Вы можете сохранить время создания токена JWT (последнее) в базе данных, а затем вы можете перекрестно проверить время последнего создания (сравнить с текущим временем), когда пользователь входит в приложение.