Могу ли я широко использовать JWT в качестве основного носителя для хранения данных сеанса для предотвращения избыточных запросов к базе данных? - PullRequest
0 голосов
/ 06 июля 2019

Простой поиск по этой теме возвращает множество статей / публикаций в блогах и обсуждений на форумах о предостережениях, связанных с использованием JWT в качестве носителя для хранения сеансов.

Но я все еще считаю JWT отличным сеансоммедиа хранилище.Потому что создание JWT - это не операции ввода-вывода, а запросы к базам данных (даже самые легкие, основанные на памяти, такие как Redis) - это операции ввода-вывода в сети / на диске.Поэтому при масштабировании отсутствие ввода-вывода для чего-либо вместо того, чтобы иметь это, имеет большое значение.

Вот моя точка зрения.Много лет назад у нас были проблемы с управлением хранилищем сеансов на стороне сервера, и мы обнаружили, что оно не масштабируется, поэтому мы обнаружили, что API без сохранения состояния не требуют хранения данных сеансов на сервере, и начали их использовать.Затем мы обнаружили, что у нас есть проблемы с вызовом базы данных для проверки подлинности пользователя при каждом вызове API, и обнаружили, что передача данных пользователю и его подписание для предотвращения мошеннических утверждений - это путь.

Но почему только проверка подлинности пользователя?почему не все остальное!например, когда пользователь передает идентификатор некоторых сущностей через API, мы могли бы транспортировать основные объекты, используя JWT от клиентов, вместо идентификаторов и избыточных запросов.

Я знаю, что существуют проблемы с аннулированием данных, которые мы даемпользователю, но у него есть свои собственные решения, такие как использование времени истечения срока действия, повторного чёрного списка и т. д ...

Я также знаю, что, делая это, мы перемещаем использование BW изнутри нашего сервера (между бэкэндом иБД) в Интернет (между пользователем и сервером), но я считаю, что это в большинстве случаев более экономично.Я не прав?

TLDR;

API без сохранения состояния вынуждают нас выполнять избыточные запросы, а не только для пользовательских данных.Кроме аутентификации и пользовательских данных, почему мы не должны использовать JWT для хранения многих других вещей, чтобы предотвратить эту избыточность?

1 Ответ

0 голосов
/ 06 июля 2019

Что будет "все остальное"? И как часто это будет меняться? Обратите внимание, что вам нужно будет создавать новый подписанный JWT после каждого изменения, передавать его клиенту, заставлять его забыть старый JWT, который использовался ранее, и использовать вместо него новый. Это были бы «данные сеанса». Это не будет правильным использованием для JWT.

...