Spring безопасность jwtAuthConverter не запускаетсяJAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Spring безопасность jwtAuthConverter не запускается

Сообщение Гость »


Я пытаюсь использовать Spring Security и Keycloak для своей системы аутентификации в своем бэкэнде загрузки Spring. Часть keycloak выполняет свою работу: у меня есть сервер keycloak, работающий на локальном хосте: 8180, где я могу создавать роли и т. д. Когда внутренний пользователь не подключен, появляется веб-представление keycloak и позволяет мне подключиться или зарегистрировать нового пользователя. При отображении внутренней части OAuth2AuthenticationToken я получаю всю необходимую информацию, включая роль пользователя (скриншот 1).

Дело в том, что при защите маршрута с помощью @preAuthorize() (AppController.kt) срабатывает функция hasRole, запускающая hasAnyRole и hasAnyAuthorityName (скриншот 2). Но, глядя на набор ролей, вызывая (getAuthoritySet()), я не вижу PREFIX_client_test. При установке точки останова в jwtAuthenticationCONverter() я вижу, что она срабатывает только при запуске приложения, а не при переходе по защищенному маршруту. Не знаю, знаете ли вы об этом, я предоставлю вам код и скриншот ниже, спасибо за ваши ответы.

Результат OAuth2AuthenticationToken Результат OAuth2AuthenticationToken

Точка останова в hasAnyAuthorityName Точка останова в hasAnyAuthorityName

AppController.kt

пакет com.linkedout.backend.controller импортировать org.springframework.security.access.prepost.PreAuthorize импортировать org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken импортировать org.springframework.web.bind.annotation.GetMapping импортировать org.springframework.web.bind.annotation.RequestMapping импортировать org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/") открытый класс AppController { @GetMapping открыть весело привет (токен: OAuth2AuthenticationToken): String { вернуть «Токен: ${токен}» } @GetMapping("кандидат") @PreAuthorize("hasRole('client_candidate')") открытое развлечение helloProtected(): String { вернуть «Привет, премиум-пользователь» } @GetMapping("тест") @PreAuthorize("hasRole('client_test')") открытый веселый тест(): String { вернуть «Это тест» } @GetMapping("админ") @PreAuthorize("hasRole('client_admin')") открыть веселье helloProtectedAdmin(): String { вернуть «Привет, администратор» } } SecurityConfig.kt

пакет com.linkedout.backend.config импортировать com.linkedout.backend.KeycloakLogoutHandler импортировать ломбок.RequiredArgsConstructor импортировать org.springframework.context.annotation.Bean импортировать org.springframework.context.annotation.Configuration импортировать org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity импортировать org.springframework.security.config.annotation.web.builders.HttpSecurity импортировать org.springframework.security.config.annotation.web.configuration.EnableWebSecurity импортировать org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter импортировать org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter импортировать org.springframework.security.web.SecurityFilterChain @Конфигурация @EnableWebSecurity @EnableMethodSecurity (prePostEnabled = true) @RequiredArgsConstructor внутренний открытый класс SecurityConfig() { @Бин @Throws(Исключение::класс) откройте забавную filterChain(http: HttpSecurity): SecurityFilterChain { http.csrf { csrf -> csrf.disable() } .authorizeHttpRequests { auth -> auth.anyRequest().fullyAuthenticated() } .oauth2Login { } .oauth2ResourceServer { oauth2 -> oauth2.jwt { jwtConfigurer -> jwtConfigurer.jwtAuthenticationConverter(jwtAuthenticationConverter()) } } вернуть http.build() } открытое развлечение jwtAuthenticationConverter(): JwtAuthenticationConverter { val jwtGrantedAuthoritiesConverter = JwtGrantedAuthoritiesConverter() jwtGrantedAuthoritiesConverter.setAuthoritiesClaimName("роли") jwtGrantedAuthoritiesConverter.setAuthorityPrefix("ROLE_") val jwtAuthenticationConverter = JwtAuthenticationConverter() jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(jwtGrantedAuthoritiesConverter) вернуть jwtAuthenticationConverter } } application.yml
spring: безопасность: оаут2: сервер ресурсов: просто: эмитент-uri: http://localhost:8180/realms/Linkedout jwk-set-uri: http://localhost:8180/realms/Linkedout/ ... nect/certs клиент: Регистрация: плащ-ключ: идентификатор клиента: серверная часть секрет клиента: PjkVtHOWmu7BEekOqJnY8TopHrJO0iCE тип разрешения-авторизации: код_авторизации область действия: openid поставщик: плащ-ключ: эмитент-uri: http://localhost:8180/realms/LinkedOut атрибут имени пользователя: предпочтительное_имя_пользователя сервер: порт: 9090
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»