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.CsrfConfigurer
|
||||||
import org.springframework.security.config.annotation.web.configurers.SessionManagementConfigurer
|
import org.springframework.security.config.annotation.web.configurers.SessionManagementConfigurer
|
||||||
import org.springframework.security.config.http.SessionCreationPolicy
|
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
|
import org.springframework.security.web.SecurityFilterChain
|
||||||
|
|
||||||
|
|
||||||
@@ -23,8 +25,12 @@ class WebSecurityConfig () {
|
|||||||
http.authorizeHttpRequests(Customizer { auth ->
|
http.authorizeHttpRequests(Customizer { auth ->
|
||||||
auth.anyRequest().authenticated() })
|
auth.anyRequest().authenticated() })
|
||||||
.oauth2ResourceServer(Customizer { oauth2 ->
|
.oauth2ResourceServer(Customizer { oauth2 ->
|
||||||
oauth2!!.jwt(Customizer.withDefaults())
|
// oauth2!!.jwt(Customizer.withDefaults())
|
||||||
}) // ← проверяем JWT токен
|
// добавляем конвертер для извлечения ролей
|
||||||
|
oauth2.jwt { jwt ->
|
||||||
|
jwt.jwtAuthenticationConverter(jwtAuthenticationConverter())
|
||||||
|
}
|
||||||
|
}) // проверка JWT токен
|
||||||
.sessionManagement(Customizer { session: SessionManagementConfigurer<HttpSecurity?>? ->
|
.sessionManagement(Customizer { session: SessionManagementConfigurer<HttpSecurity?>? ->
|
||||||
session!!.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
|
session!!.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
|
||||||
}) // без сессий
|
}) // без сессий
|
||||||
@@ -33,4 +39,17 @@ class WebSecurityConfig () {
|
|||||||
return http.build()
|
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