Какую пользу дает JWT? - PullRequest
       16

Какую пользу дает JWT?

1 голос
/ 06 мая 2019

Я реализовал безопасность на основе JWT в тестовом проекте REST Core Web API, он работает нормально, но я не уверен, что вижу в этом выгоду. В Интернете говорится, что JWT хорош, потому что он легкий и может использоваться для проверки источника данных, но в моей реализации:

  • Клиент сначала вводит имя пользователя и пароль для аутентификации
  • Если user + pwd в порядке, токен возвращается, и каждый последующий вызов API использует этот токен jwt (вместо имени пользователя и пароля) для аутентификации.

Это нормально, но почему бы просто не использовать имя пользователя + пароль при каждом вызове API (и пропустить сложность управления токеном)? На самом деле в моем случае есть дополнительные осложнения, потому что теперь я должен учитывать дату истечения срока действия (токена), которая находится за пределами моей системы.

Может кто-нибудь объяснить, что мне здесь не хватает?

1 Ответ

0 голосов
/ 06 мая 2019

Одним из основных преимуществ и мотивов использования JWT является то, что оно позволяет вашему серверному приложению выдвигать всю информацию о состоянии сеанса за пределы приложения. То есть в теоретическом пределе реализация JWT на самом деле не имеет состояния .

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

Во-первых, JWT содержит секцию претензий , которая обычно записывается издателем токена, то есть приложением на стороне сервера. Одно из полей называется exp и содержит время истечения токена. Одним из свойств JWT является то, что пользователь не может вмешиваться в них. Это осуществляется с помощью контрольной суммы, которая может измениться, если какая-либо часть JWT изменится. В совокупности это означает, что пользователь не может изменить время истечения (или любое другое утверждение), и сервер может неявно доверять этому времени. Когда пользователь отправляет запрос с JWT, теоретически все, что нужно сделать серверу, это просто проверить exp, чтобы убедиться, что токен все еще действителен. То есть состояние сеанса фактически находится вне приложения, по крайней мере, теоретически.

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

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

...