А зачем его хранить в БД? У него все механизмы специально сделаны так, что безопасны без всяких проверок и сравнений с данными в БД. Но безопасны по своему.
Вот JWT можно распарсить и достать из него имя юзера. Зачем тогда JWT в БД сохранять? Какая в этом польза?
А реальные конкретные данные пользователя типа имени пользователя, постов, комменариев превращать в JWT и сохранять в БД это вообще безумие (но я уверен, вы не это имели ввиду).
Вообще, если смотреть на токен JWT как на команду из одного верифицированного сервиса в другой, всё довольно логично и изящно. Кто попало токен создать не может, живёт токен недолго, в базе данных команду из точки А в точку Б хранить не надо и остальные фичи ЖВТ.
А как ID сессии его зачем использовать? Почему не просто набор рандомных знаков?
Может, типа подписано? Так если кто-то способен перебором узнать id сессии (не способен), то и токен жвт он тем же перебором разгадает, и подпись не спасёт.
Вообще, генерация жвт это не какая-то магия, она довольно проста.
function getJwt(header, data, secretKey) {
let body = base64(JSON.stringify(header)) + '.' + base64(JSON.stringify(data));
return body + '.' + hash(body, secretKey);
}
(Примерно такой код был в официальных доках жвт).
То есть безопасность - это не какая-то магия. Это просто данные + хеш от (данные + соль). Подменишь данные, и хеш не совпадёт, а без соли хеш не пересоздать.
Но зачем это нужно и так неподделываемому айди сессии?
Айди могут украсть, скажете вы. И токен жвт тоже могут украсть, целиком, и с данными, и с подписью.
Может, я просто чего-то в современных сессиях не понимаю? Просто все фичи ЖВТ в вопросе сессий выглядят как пятое колесо. Непонятно, зачем они, что с ними делать и какую проблему они решают.
Блин, чёто я повторяюсь...