Ответ 1
Основное различие - размер хранилища сеанса и работа поиска, требуемая от сервера:
-
На стороне сервера JWT хранит одиночный ключ в памяти (или в файле конфигурации) - называется секретным ключом. Этот ключ имеет две цели: он позволяет создавать новые зашифрованные маркеры, а также работает как главный ключ, который "открывает все блокировки", или в реальной жизни проверяет все токены. В результате сервер реагирует гораздо быстрее на auth-запросы, потому что не имеет значения, если вы зарегистрировали двух или двух миллионов пользователей - для проверки подлинности всех клиентских запросов будет использоваться одинаковое количество записей (один, этот серверный ключ).
-
Традиционная аутентификация, которая хранит пользовательские сеансы в базе данных, создает запись в db для каждого отдельного пользователя, что приводит к нескольким клавишам. Поэтому, если у вас зарегистрировано два миллиона пользователей, сервер создаст два миллиона записей и с каждым запросом клиента серверу необходимо найти соответствующую запись сеанса в базе данных *.
JWT оставляет его на стороне клиента для хранения и обработки всего объекта session/user. Это на самом деле имеет гораздо больше смысла, потому что каждый клиент обрабатывает только свои собственные данные, поэтому он не вызывает тяжелую работу для клиентской стороны.
Что касается того, что вы написали в своем последнем абзаце, это не только вызовы, которые мы сохраняем здесь. JWT на самом деле гораздо более масштабируемый из-за его независимого и легкого характера, он не терпит неудачу по мере того, как запросы auth накапливаются, и это позволяет серверу обрабатывать auth через устройства и службы без управления сеансами на стороне сервера,
Тем не менее, разумные возможности для db-сессий: они могут быть более безопасными из-за этой задержки и также менее уязвимы для захвата сеанса после выхода пользователя из системы.
* Метод хранимых сеансов db может быть оптимизирован с эффективным кэшированием и путем хранения только идентификатора сеанса (в отличие от всего объекта пользователя) в быстром сервере ключей/значений, например Redis. Тем не менее, я бы по-прежнему выбирал метод JWT по сравнению с db для большинства случаев.