fix security configuration
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -9,6 +9,8 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe
|
||||
import org.springframework.security.config.annotation.web.configurers.CsrfConfigurer
|
||||
import org.springframework.security.config.annotation.web.configurers.SessionManagementConfigurer
|
||||
import org.springframework.security.config.http.SessionCreationPolicy
|
||||
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter
|
||||
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter
|
||||
import org.springframework.security.web.SecurityFilterChain
|
||||
|
||||
|
||||
@@ -23,8 +25,12 @@ class WebSecurityConfig () {
|
||||
http.authorizeHttpRequests(Customizer { auth ->
|
||||
auth.anyRequest().authenticated() })
|
||||
.oauth2ResourceServer(Customizer { oauth2 ->
|
||||
oauth2!!.jwt(Customizer.withDefaults())
|
||||
}) // ← проверяем JWT токен
|
||||
// oauth2!!.jwt(Customizer.withDefaults())
|
||||
// добавляем конвертер для извлечения ролей
|
||||
oauth2.jwt { jwt ->
|
||||
jwt.jwtAuthenticationConverter(jwtAuthenticationConverter())
|
||||
}
|
||||
}) // проверка JWT токен
|
||||
.sessionManagement(Customizer { session: SessionManagementConfigurer<HttpSecurity?>? ->
|
||||
session!!.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
|
||||
}) // без сессий
|
||||
@@ -33,4 +39,17 @@ class WebSecurityConfig () {
|
||||
return http.build()
|
||||
}
|
||||
|
||||
// Конвертер JWT Authentication (извлекает роли из токена)
|
||||
private fun jwtAuthenticationConverter(): JwtAuthenticationConverter {
|
||||
val converter = JwtAuthenticationConverter()
|
||||
|
||||
// Извлекаем роли из поля realm_access.roles
|
||||
val authoritiesExtractor = JwtGrantedAuthoritiesConverter()
|
||||
authoritiesExtractor.setAuthoritiesClaimName("realm_access.roles") // где лежат роли
|
||||
authoritiesExtractor.setAuthorityPrefix("ROLE_") // добавляем префикс ROLE_
|
||||
|
||||
converter.setJwtGrantedAuthoritiesConverter(authoritiesExtractor)
|
||||
return converter
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user