Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (5)

Лучшие ответы пользователя

Все ответы (7)
  • Какой принцип работы при аутентификации JWT?

    @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 строка...
    Ответ написан
    1 комментарий
  • Убрать экранирование ковычек в json ответе Spring+Hibernate+Postgresql?

    @idyoshin
    нужно проработать транспортный объект, который будет маппится в/из JSON представления.

    Или дешево и сердито работать с Map тогда вообще можно так:

    @Inject
        private JsonParser jsonParser;
    
        @RequestMapping(value="/user_profile/{id}", method = RequestMethod.GET)
        public ResponseEntity<Map<String, Object>> get(@PathVariable("id") Long id) {
            UserEntity entity = userRepository.get(id);
            Map<String, Object> profile = jsonParser.parseMap(entity.getUserProfile());
            return new ResponseEntity(profile, HttpStatus.OK);
        }
    Ответ написан
    1 комментарий