Утилита JSON Web Tokens? Как это более эффективно, чем современные системы?

Я читал о JSON Web Tokens, и у меня возникли некоторые вопросы. Я прочитал много утверждений о том, как мы должны перейти от сессионного подхода к JWT. Я больше думаю о терминах Node JS, который предоставляет API как для интерфейса, так и для мобильных устройств.

Утверждение: JWT не требует, чтобы вы связывались с вашим хранилищем данных значения ключа для каждого http-запроса.

Вопрос 1: У меня не может быть одного закрытого ключа для всех пользователей (какой риск безопасности, если у меня только один закрытый ключ?). Тогда мне нужно было бы иметь БД в любом случае.

Утверждение: JWT отправляет токен при каждом запросе. И поэтому нам не нужно хранить какие-либо данные, такие как "имя, адрес электронной почты", в сеансе, вместо этого они могут находиться в самом токене.

Вопрос 2: Не увеличится ли размер полезной нагрузки, поскольку они будут отправляться для каждого запроса, и он также содержит данные?

Заявка: Вы можете использовать тот же метод для мобильной аутентификации, что и для аутентификации через веб-интерфейс.

Вопрос 3: Поскольку сервер теперь должен расшифровать токен и связаться с сервером, разве это не накладные расходы для веб-интерфейса?

Утверждение: передайте токен JS и сохраните токен в sessionStorage или localStorage.

Вопрос 4: Поскольку в sessionStorage отсутствует понятие "httpOnly", разве это не проблема безопасности? Также могут ли хромированные плагины обойти безопасность, получив токен и войдя в систему?

Наконец, кроме проблемы CRSF, совместного использования кода между UI и Mobile Auth и преимуществами CSRF, я действительно не вижу большого преимущества по сравнению с текущим механизмом на основе сеансов. Правильно ли я думаю?

Кроме того, в каких случаях JWT имеет недостатки по сравнению с традиционными системами на основе сеансов?

1 ответ

Решение

Вопрос 1

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

Также вам в любом случае потребуется хранить токен в вашей базе данных, потому что когда токен отозван, вам нужно отклонить этот запрос, даже если токен действителен

Но стоит обратить внимание на то, что аутентификация на основе токенов полезна для всех клиентов, а не только для наших приложений, поэтому переписывание Apis не требуется.

JWT - это один формат для токена в аутентификации на основе токена

вопрос 2

Да, полезная нагрузка может легко достигать 700-1000 символов, даже если вы добавите небольшое количество деталей в JWT

Но это помогает иметь четкую информацию об аутентифицированном пользователе, не нажимая, предложение здесь состоит в том, чтобы иметь минимальный объем и хранить остальное в БД и использовать его при необходимости

вопрос 3

Нет, все, что нужно клиенту ( Webapp), - это сохранять и отправлять этот токен в каждом запросе, что аналогично отправке куки-файла сессии (это просто автоматически).

вопрос 4

Да, любой может скопировать токен и получить доступ (но срок его действия истечет через короткое время), это то же самое, что (перехват сеанса), или после того, как сеанс установлен, пользователь может напрямую вызывать Apis с этой консоли rest в bowser, и он все еще работает.

В этом случае токен является эффективным, так как он обычно имеет короткое время жизни, а не время жизни сессии

В JWT есть реальная выгода, вершина может предоставить тот же Apis любому клиенту, нет необходимости писать отдельный Apis для Webapp и других клиентов.

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

Другие вопросы по тегам