Как JWT выполняет аутентификацию - PullRequest
0 голосов
/ 25 мая 2018

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

Аутентификация - это процесс определения того, действительно ли кто-то или что-токем или чем он объявлен.

Теперь, если мой сервер получает запрос от клиента и заголовок этого запроса содержит JWT.Я проверю токен JWT с моим секретным ключом.

Если token действителен, я могу точно сказать, что:

  1. Тотокен был сгенерирован моим сервером.
  2. Во время создания токена пользователь предоставил свои правильные учетные данные.Это означает, что если пользователь заявил, что он John123, он предоставил правильный пароль для John123 (сервер подтвердил это, в противном случае сервер вернул сообщение об ошибке).

Если token действительно, что я НЕ могу сказать наверняка:

  1. На последующие запросы, если пользователь запрашивает John123 (передавая {userid:John123} в теле запроса), и они предоставляют нам действительныеJWT, я не могу точно сказать, что их утверждение верно.Поскольку возможно, что пользователь Alice123 вошел в localstorage из John123, украл токен и установил его в свои localstorage.

Теперь мой вопрос заключается в том, как на самом деле JWTподтвердить, что пользователи на самом деле являются тем, кем они себя считают.Что мне здесь не хватает?Нужно ли сохранять отображение JWT, userid и ip клиента.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

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

Обычно вы сохраняете идентификатор пользователя или имя в токене.Для этого можно использовать sub претензию .

Претензия "sub" (субъект) идентифицирует принципала, являющегося субъектом JWT.Утверждения в JWT, как правило, являются утверждениями о предмете.

Промежуточное программное обеспечение аутентификации обычно только проверяет, что сам JWT не был изменен.Но вы не узнаете, использует ли Алиса жетон Джона.

0 голосов
/ 25 мая 2018

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

Что касается вашего фактического вопроса в конце, вы, как правило, понятия не имеете, кто на самом деле является носителем JWT.Если Алиса украдет телефон Джона, то на самом деле она может маскироваться под него.Но имейте в виду, что если она делает что-то столь радикальное, то, вероятно, у нее также есть его кредитные и банковские карты и, возможно, некоторые другие пароли.Ни один процесс аутентификации не является полностью безопасным.

Что касается мелких форм краж, JWT все еще устойчив.Например, если кто-то попытается настроить атаку «человек посередине», чтобы понюхать ваш JWT, он не будет работать, если ваше приложение шифрует этот JWT с помощью SSL.И настоящая причина JWT, конечно, заключается в том, что они уже подписаны ключом, известным только серверу, чтобы предотвратить несанкционированный доступ к ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...