@P_Alexander
First head

Какой принцип работы при аутентификации JWT?

Добрый вечер, пытаюсь реализовать веб службу рест которая должна обеспечивать работу кино афиши.
Задачи рест сервиса отдать все фильмы, удалить, изменить описание фильма.
Секюрити - должно быть две роли админ и юзер, удалять и изменять описание может только админ. Аунтефикацию сделать с помощью jwt.
Находил статьи по этому поводу спринг секюрити + рест + jwt но на данный момент я только начал изучать сприн...
Как пытаюсь сделать я, WildFly сервер, + mongoDB + REST на jersey + сервлеты, и не могу понять как мне прикрутить jwt, , а именно понять логику работы во время аунтификации и после нее!!
С рестом кое как разобрался, а вот с секюрити нет, Вопрос какой принцип работы между клиентом и веб сервером при аунтификации jwt?
Например пользователь ввел логин и пароль нажал на форму войти, это полетело на указанный урл там сервак пользователю токен и где он хранится в браузере???? в куках или где?
Какой вообще принцип работы пользователя и сервера при аунтификации и какой уже после аунтификации?
Совет, объяснение, пример приветсвуется.Спасибо.
  • Вопрос задан
  • 390 просмотров
Решения вопроса 1
@idyoshin
jwt в первую очередь используется в микросервисных архитектурах, когда конечный клиентский запрос будет обрабатываться одним из нескольких серверов.

Классически в такой архитектуре использовали механизмы OAuth. которые при обслуживании каждого запроса клиента осуществляли запрос на сервер OAuth - "клиент с токеном ААА запрашивает выполнение действия БББ"

Понятно что узким местом становится сервер OAuth - который должен выдержать "шторм" запросов при нагрузке. Вторым узким местом такой архитектуры становится увеличение времени ожидания ответа на запрос - внутри запроса как минимум будет выполнен 1 запрос авторизации.

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

JWT решает эти проблемы следующим путем: access токен сразу же содержит необходимую информацию: на пример о Ролях текущего пользователя, или о доступных ему действиях, кроме того предоставляет информацию о времени жизни этого токена. Обязательно в конце токена цифровая подпись. По ней собственно и проверяется "действительность" токена.

Алгоритм прост:
1. осуществить авторизацию - получить ответ 2 токена access, refresh.
2. обращаемся к микросервисам с использованием access токена.
3. если необходимо с помощью refresh токена обновляем access токен.
4. когда и refresh токен истек - осуществляем повторную авторизацию.

Где хранить JWT токен - где угодно. все зависит от инструментов и реализации. На пример можно реализовать хранение токена в LocalStorage, и пробрасывание его во время каждого запроса в виде header'а. Если один и тот же домен - то токен можно хранить в cookie и т.д.

Что хранить в виде полезной нагрузки? Сам разработчик должен для себя решить какой объем информации публиковать в таком токене, кроме того стоит учитывать что информацию из токена можно прочитать - это просто base64 кодированная JSON строка...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы