Я работаю над веб-приложением и собираюсь использовать аутентификацию на основе JWT. Мой процесс аутентификации будет таким:
- Клиент отправляет запрос на маршрут
/login
с учетными данными. - Сервер проверяет учетные данные по базе данных.
- Если правильно , создайте токен доступа (короткое время истечения) и refre sh токен (длинное время истечения) с именем пользователя в качестве полезной нагрузки. Отправьте токен доступа в ответ, отправьте refre sh токен в
httpOnly
cook ie. Кстати, я использую библиотеку JWT для создания обоих этих токенов. - Клиент отправляет токен refre sh через маршрут cook ie на
/refresh_token
для получения нового токена доступа. - Для выхода из системы я собираюсь очистить токен доступа на стороне клиента, а затем отправить запрос с токеном refre sh на маршрут
/logout
, чтобы удалить токен refre sh.
Сейчас Мой первый вопрос заключается в том, что я не могу просто удалить refre sh token. Поэтому я подумал, что добавив столбец версии в таблицу пользователей в моей базе данных, чтобы отслеживать текущую версию токена refre sh. Когда пользователь хочет выйти, я собираюсь увеличить версию. Однако это приведет к выходу пользователя из разных клиентов. Я не хочу этого Что я должен сделать, чтобы сделать недействительным токен refre sh и убедиться, что пользователи могут выйти из системы, откуда они отправляют запрос на выход?
Обновление: я подумал, что вместо версии я могу создать новую таблицу в своей базе данных для черного списка refre sh токены. Не противоречит ли это свойству JWT без гражданства?