Может ли JWT (веб-токен json) полностью заменить сеанс?

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

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

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

В целом, я очень смущен тем, можно ли использовать JWT для полной замены сеанса или нет?

Большое спасибо.


person mailme365    schedule 15.12.2015    source источник


Ответы (1)


(Это еще не ответ. Просто некоторая информация, которую я собрал до сих пор. У меня точно такой же вопрос. Я изменю его на ответ, когда полностью решу этот вопрос.)

До сих пор я думаю, что JWT можно использовать для замены сеанса + cookie в отношении аутентификации. Но сеанс используется не только для аутентификации, он больше предназначен для хранилища данных пользователя. Я не уверен, может ли JWT заменить сеанс для этой цели, учитывая ограничение размера JWT (описанное ниже). И ИМХО, аутентификация оказалась одним из вариантов использования сеанса, поскольку такая информация должна быть специфичной для пользователя.

Если вы используете JWT вместо сеанса на стороне сервера, вы, вероятно, сохраните JWT как заголовок HTTP. И, скорее всего, в виде файла cookie (см. здесь). Но есть некоторый ограничение размера заголовка и 4 КБ для файла cookie. Если вы используете сеанс на стороне сервера, я не думаю, что такой предел существует.

В этой статье перечислены некоторые предостережения относительно JWT. .

ДОБАВИТЬ 1

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

Я нужно хранилище сеансов с использованием токенов JSON Web Token? Почему бы просто не использовать файлы cookie?

ДОБАВИТЬ 2

Если мы сохраним JWT как файл cookie в качестве моей первой ссылки выше, разве это не повторная реализация подписанный файл cookie?

Ответ здесь: Должны ли мы хранить JWT как файл cookie?

И еще один мой вопрос: Аутентификация и масштабируемость на основе токенов? Иллюзия?

person smwikipedia    schedule 06.01.2016
comment
@ mailme365 Я обновил свой ответ. Теперь это может больше походить на ответ. - person smwikipedia; 07.01.2016
comment
Большое спасибо за ваш подробный ответ, JWT не может полностью заменить сеанс, поэтому многие достоинства JWT (например, CDN, без гражданства и т. д.) будут работать только для сервера аутентификации, а не для бизнес-сервера, если только мы не используем Redis для сохранения сеанса данные в соответствии с рекомендациями Spring. Это означает, что если мы объединим функцию аутентификации и бизнес-функцию в одно и то же приложение tomcat, мы все равно будем использовать сеанс, я не вижу очевидного преимущества использования JWT в этом случае, единственным преимуществом может быть предотвращение атаки csrf. - person mailme365; 10.01.2016
comment
@mailme365 Спасибо за резюме. Я тоже так думаю. - person smwikipedia; 10.01.2016