Поскольку @ Гай Корланд уже охватил основную c идею JWT, я прокомментирую два подхода, о которых вы упомянули.
Должен ли я хранить Токен JWT в качестве ключа и соответствующая информация пользователя в качестве значения в Redis, чтобы я мог получить информацию по токену, если он действителен
Этот подход не очень полезен, если все, что вы пытаетесь найти в Redis, это информация о пользователе. Это связано с тем, что пользовательская информация может быть напрямую сохранена как claims
в разделе payload
JWT, что позволяет избежать вызова поиска из Redis. Если claim
содержит конфиденциальную информацию, всегда можно зашифровать токен JWT, чтобы гарантировать, что к нему не обращаются непреднамеренные получатели.
При этом недостатком является отсутствие необходимости обращаться к кешу вообще. что вы не можете аннулировать / обновить sh токены. В общем, рекомендуется, чтобы у вас не было долгоживущих токенов, так как это уязвимость безопасности.
если я закодирую пользовательские данные в самом JWT и использую Redis только для хранения действительных токенов
Это лучше, чем предыдущий параметр, и работает, если информация пользователя закодирован как часть токена JWT. Также вы можете сохранить «контекст» токена как значение в Redis (ключом является сам JWT). «Контекст» здесь означает, что в последний раз токен использовался (lastAccessTime), интервал истечения и т. Д. c. Используя этот «контекст», вы можете определить, является ли сеанс активным / неактивным и следует ли аннулировать токен и предоставить клиенту токен fre sh.