JWT, можно ли таким образом обойтись без Refresh Token?
Делаю сайт, разбираюсь с JWT и Refresh Token, сначала я сделал всё по фен-шую, но потом понял что система ротации Refresh токенов постоянно глючит, их еще надо отслеживать, они грузят API сайта и базу данных и прочее. И в общем, решил их убрать полностью, это заняло 3 минуты. И вуаля, у меня только JWT. Все работает чудесно, установил годность JWT на 10 лет.
Конечно, это будет работать без проблем только до того как кто-то не сопрёт JWT токен или не поменяет себе пароль.
С первым бороться смысла не вижу. Спереть можно что угодно.
А вот второе проблема.
Ведь если человек меняет пароль, то все прошлые JWT токены (которые содержат только ID пользователя и его роль) все равно будут работать 10 лет.
Но что если включить в JWT токен еще хеш пароля?
И валидацию JWT проводить например 1 из 100 раз, сравнивая этот хеш в JWT с хешем в базе данных?
Можно конечно и каждый раз сравнивать, но это будет большая нагрузка на БД, и принципиально ничего не выигрываем.
По-моему, идея хорошая, что тут может пойти не так?
Основная суть JWT -- обойтись вообще без обращений к БД при аутентификации и авторизации. Судя по
они грузят API сайта и базу данных
и
включить в JWT токен еще хеш пароля
это не ваш случай, вы всё равно обращаетесь к БД (или будете обращаться для сравнения хеша).
В таком случае используйте простые токены. Просто строку случайных символов, без нагрузки. Их не надо расшифровывать, загружая CPU. Их можно использовать вечно, в случае компрометации отзывать и создавать новый вручную (конечно, придётся прописать для этого кнопки в ЛК юзера). Протухший простой токен не спалит имейл или атрибуты авторизации, не позволит подделывать токены, в отличие от JWT без рефреша.