Я применяю JWT для аутентификации запросов. В моем Spring Cloud Gateway работают парсинг и валидация. Я создал пользовательский фильтр для SecurityWebFilterChain
, который анализирует и проверяет JWT в заголовке запроса.
Я добавлю этот пользовательский фильтр в ServerHttpSecurity, используя ServerHttpSecurity.addFilterBefore(myCustomJwtRequestFilter, UsernamePasswordAuthenticationFilter.class)
.
Я хочу использовать SecurityContextHolder.getContext().setAuthentication(authentication)
Spring Security для аутентификации запроса.
Я обнаружил, что в большинстве его примеров для создания класса аутентификации используется UserDetails.
В большинстве найденных примеров используется UsernamePasswordAuthenticationToken
, и я обнаружил, что что для этого требуется UserDetails
. Для сборки UserDetails
, по сути, требуются имя пользователя, пароль, роли.
Но в моем случае я не хочу проверять свой jwt с помощью пользовательской БД каждый раз, когда я получаю запросы. Кроме того, мне не нужен пароль пользователя, поскольку я не буду проверять его после создания токена. Я хочу использовать только имя пользователя и роли в самой полезной нагрузке JWT.
Итак, я хочу создать класс Authentication
только с именем пользователя и ролями и установить его аутентификацию, если анализируемый jwt проверен с помощью моего пользовательского метода.
Хорошо работает с пользовательскими подробностями:
UserDetails userDetails = User.builder().username(String.valueOf(parsedInfo.get("username")))
.authorities(parsedInfo.get("roles")).password("dummypassword").build();
Но я должен установить в него фиктивный пароль, который мне не нужен.
Я думаю, что мое решение не подходит правильно применять пружинную безопасность. Но если я не буду использовать UserDetails, будет ли выгодно использовать Spring Security?
Есть ли лучшее решение для моего случая?