Как при проверке подлинности на основе токенов сервер приложений узнает, какие токены являются действительными? - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь понять, что файл cookie использует аутентификацию на основе токенов.Я понял основы - куки должны храниться на сервере (а также на клиенте) для проверки каждый раз, тогда как токены должны храниться только на стороне клиента.Сервер просто декодирует любые входящие токены и проверяет запрос.

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

https://dzone.com/articles/cookies-vs-tokens-the-definitive-guide

  1. Пользователь вводит свои учетные данные для входа.
  2. Сервер проверяет правильность учетных данных и возвращает подписанный токен.
  3. Этот токен хранится на стороне клиента, чаще всего в локальном хранилище, но также может храниться в хранилище сеансов или в файле cookie.
  4. Последующие запросы к серверу включают этот токен в качестве дополнительной авторизации.заголовок или с помощью одного из других методов, упомянутых выше.
  5. Сервер декодирует JWT, и если токен действителен, обрабатывает запрос.
  6. Как только пользователь выходит из системы, токен уничтожается клиентом.со стороны, взаимодействие с сервером не требуется.

Если быть точным - я хотел бы знать, как работает # 5.Спасибо.

1 Ответ

1 голос
/ 04 июня 2019

Полный ответ на ваш вопрос будет очень длинный, но вот моя попытка краткого.Сервер также является объектом, который в первую очередь выдает JWT.Таким образом, он обладает ключом , который использовался для подписи каждого исходящего JWT.В результате этого, когда сервер получает входящий JWT, он сначала пытается открыть / разблокировать этот JWT, используя свой закрытый ключ.Если JWT был каким-либо образом подделан, сервер может не открыть его должным образом, и это приведет к исключению.В качестве примера одной проверки работоспособности, которую сервер будет выполнять в отношении входящей JWT, он будет наблюдать контрольную сумму JWT, которая не пройдет в случае подделки.

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

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

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

...