403 Запрещено при введении авторизации на Spring Boot Rest.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 403 Запрещено при введении авторизации на Spring Boot Rest.

Сообщение Anonymous »

Я работаю над своим первым проектом весенней загрузки. Я успешно настроил его для проверки аутентификации; если пользователь/пароль были неправильными, метод не был вызван (статус 401 неавторизован), если он был правильным, то все прошло успешно.
Теперь я добавил авторизацию с помощью JSR250 и получаю только 403 Access отказано.
WS:

Код: Выделить всё

@RestController
@RequestMapping("/password")
public class ServicioPassword {
@GetMapping(path = "ldap")
public ResponseEntity getLdap() {
var authentication = SecurityContextHolder.getContext().getAuthentication();
System.out.println("EN LDAP " + authentication.getPrincipal() + " - " + authentication.isAuthenticated());
for (var authority : authentication.getAuthorities()) {
System.out.println("Authority= " + authority);
}
return ResponseEntity.ok("DE LDAP");
}
При вызове я получаю это на консоли:

EN LDAP LdapUserDetailsImpl [Dn=cn=ivr_apl_user,ou= IVR,ou=Applicaciones,dc=pre,dc=aplssib; Имя пользователя = ivr_apl_user; Пароль=[ЗАЩИЩЕНО]; Включено=истина; AccountNonExpired=истина; CredentialsNonExpired=истина; AccountNonLocked=истина; Предоставленные полномочия=[AGNI_OIMIVR]] - true

Authority= AGNI_OIMIVR

Тем не менее, если я добавлю @RolesAllowed("AGNI_OIMIVR" ), когда я вызываю его, я получаю 403 Forbidden.
The MethodSecurityConfig:

Код: Выделить всё

@Configuration
@EnableGlobalMethodSecurity(jsr250Enabled = true, prePostEnabled = true)
public class MethodSecurityConfig
extends GlobalMethodSecurityConfiguration{
}
Я сохранил WebSecurityConfig:

Код: Выделить всё

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {

@Autowired
private Environment environment;

@Bean
BindAuthenticator bindAuthenticator(
final BaseLdapPathContextSource contextSource) {
var bindAuthenticator = new BindAuthenticator(contextSource);
bindAuthenticator.setUserDnPatterns(new String[]{environment.getRequiredProperty("spring.ldap.userdnpattern")});
return bindAuthenticator;
}

@Bean
AuthenticationProvider ldapAuthenticationProvider(
final LdapAuthenticator ldapAuthenticator) {
var ldapAuthenticationProvider = new LdapAuthenticationProvider(ldapAuthenticator);
var ldapUserDetailsMapper = new CustomUserDetailsMapper();
var ldapMemberRoles = environment.getRequiredProperty("spring.ldap.roleattributes");
ldapUserDetailsMapper.setRoleAttributes(ldapMemberRoles.split(","));
ldapUserDetailsMapper.setRolePrefix("");
ldapAuthenticationProvider.setUserDetailsContextMapper(ldapUserDetailsMapper);
return ldapAuthenticationProvider;
}

@Bean
SecurityFilterChain filterChain(
final HttpSecurity http)
throws Exception {
http.csrf().disable()
.cors().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and()
.authorizeRequests()
.anyRequest().authenticated().and()
.httpBasic();

return http.build();
}
ОБНОВЛЕНИЕ: добавление журнала после настройки logging.level.org.springframework.security=TRACE:
Обратите внимание, что строка: 2022 -07-07 13:04:27.464 WARN 81968 --- [nio-8080-exec-2] e.s.d.o.s.ws.CustomUserDetailsMapper: createAuthority agni_oimivr берется из журнала одного из моих пользовательских классов.
2022-07-07 13:04:27.441 TRACE 81968 --- [nio-8080-exec-2] o.s.s.w.a.www.BasicAuthenticationFilter: Обнаружено имя пользователя «ivr_apl_user» в базовой авторизации заголовок

2022-07-07 13:04:27.442 TRACE 81968 --- [nio-8080-exec-2] o.s.s.authentication.ProviderManager: запрос аутентификации с помощью LdapAuthenticationProvider (1/1)

2022-07-07 13:04:27.444 TRACE 81968 --- [nio-8080-exec-2] o.s.s.l.a.BindAuthenticator: попытка привязки как cn=ivr_apl_user,ou=[УДАЛЕНО]
2022-07-07 13:04:27.444 TRACE 81968 --- [nio-8080-exec-2] s.s.l.DefaultSpringSecurityContextSource: удаление флага объединения для пользователя cn=ivr_apl_user,ou=[УДАЛЕНО]

2022-07-07 13:04:27.463 DEBUG 81968 --- [nio-8080-exec-2] o.s.s.l.a.BindAuthenticator : Bound cn=ivr_apl_user,ou=[УДАЛЕНО]

2022-07 -07 13:04:27.463 DEBUG 81968 --- [nio-8080-exec-2] o.s.s.l.u.LdapUserDetailsMapper : Сопоставление сведений о пользователе из контекста с DN cn=ivr_apl_user,ou=[УДАЛЕНО]

2022- 07-07 13: 04: 27.464 Warn 81968 --- [NIO-8080-EXEC-2] E.S.D.O.S.WS.Customuserdetailsmapper: Createauthority Agni_oimivr

2022-07-07 13: 04: 27.464 Devug 81968- -- [nio-8080-exec-2] o.s.s.l.a.LdapAuthenticationProvider : Прошедший проверку пользователь

2022-07-07 13:04:27.465 DEBUG 81968 --- [nio-8080-exec-2] o.s.s.w.a.www .BasicAuthenticationFilter: установите для SecurityContextHolder значение UsernamePasswordAuthenticationToken [Principal=LdapUserDetailsImpl [Dn=cn=ivr_apl_user,ou=IVR,ou=Applicaciones,dc=pre,dc=aplssib; Имя пользователя = ivr_apl_user; Пароль=[ЗАЩИЩЕНО]; Включено=истина; AccountNonExpired=истина; CredentialsNonExpired=истина; AccountNonLocked=истина; Предоставленные полномочия = [AGNI_OIMIVR]], Учетные данные = [ЗАЩИЩЕНО], Аутентифицировано = true, Подробности = WebAuthenticationDetails [RemoteIpAddress = 0:0:0:0:0:0:0:1, SessionId = null], Предоставленные полномочия = [AGNI_OIMIVR] ]]

2022-07-07 13:04:27.465 TRACE 81968 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy: вызов RequestCacheAwareFilter (7/12)

2022-07-07 13:04:27.465 TRACE 81968 --- [nio-8080-exec-2] o.s.s.w.s.HttpSessionRequestCache: нет сохраненного запроса

2022-07-07 13 :04:27.465 TRACE 81968 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : Вызов SecurityContextHolderAwareRequestFilter (8/12)

2022-07-07 13:04:27.466 TRACE 81968 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy: вызов AnonymousAuthenticationFilter (9/12)

2022-07-07 13:04:27.466 TRACE 81968 -- - [nio-8080-exec-2] o.s.s.w.a.AnonymousAuthenticationFilter : SecurityContextHolder не установлен, поскольку уже прошел аутентификацию UsernamePasswordAuthenticationToken [Principal=LdapUserDetailsImpl [Dn=cn=ivr_apl_user,ou=IVR,ou=Aplicaciones,dc=pre,dc=aplssib; Имя пользователя = ivr_apl_user; Пароль=[ЗАЩИЩЕНО]; Включено=истина; AccountNonExpired=истина; CredentialsNonExpired=истина; AccountNonLocked=истина; Предоставленные полномочия = [AGNI_OIMIVR]], Учетные данные = [ЗАЩИЩЕНО], Аутентифицировано = true, Подробности = WebAuthenticationDetails [RemoteIpAddress = 0:0:0:0:0:0:0:1, SessionId = null], Предоставленные полномочия = [AGNI_OIMIVR] ]]

2022-07-07 13:04:27.466 TRACE 81968 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy: вызов SessionManagementFilter (10/12)

2022-07-07 13:04:27.467 TRACE 81968 --- [nio-8080-exec-2] s.CompositeSessionAuthenticationStrategy: подготовка сеанса с помощью ChangeSessionIdAuthenticationStrategy (1/1)

2022-07-07 13:04:27.467 DEBUG 81968 --- [nio-8080-exec-2] w.c.HttpSessionSecurityContextRepository : HttpSession в настоящее время имеет значение null, а HttpSessionSecurityContextRepository запрещено создавать HttpSession (поскольку параметрallowSession Свойство создания неверно ) - Таким образом, SecurityContext не сохраняется для следующего запроса. (11/12)

2022-07-07 13:04:27.467 TRACE 81968 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy: вызов FilterSecurityInterceptor (12/12) )

2022-07-07 13:04:27.468 TRACE 81968 --- [nio-8080-exec-2] o.s.s.w.a.i.FilterSecurityInterceptor: не выполнена повторная аутентификация UsernamePasswordAuthenticationToken [Principal=LdapUserDetailsImpl [Dn=cn] =ivr_apl_user,ou=IVR,ou=Applicaciones,dc=pre,dc=aplssib; Имя пользователя = ivr_apl_user; Пароль=[ЗАЩИЩЕНО]; Включено=истина; AccountNonExpired=истина; CredentialsNonExpired=истина; AccountNonLocked=истина; Предоставленные полномочия = [AGNI_OIMIVR]], Учетные данные = [ЗАЩИЩЕНО], Аутентифицировано = true, Подробности = WebAuthenticationDetails [RemoteIpAddress = 0:0:0:0:0:0:0:1, SessionId = null], Предоставленные полномочия = [AGNI_OIMIVR] ]] перед авторизацией

2022-07-07 13:04:27.468 TRACE 81968 --- [nio-8080-exec-2] o.s.s.w.a.i.FilterSecurityInterceptor : Авторизация вызова фильтра [GET /password/ldap] с помощью атрибуты [аутентифицированные]

2022-07-07 13:04:27.469 DEBUG 81968 --- [nio-8080-exec-2] o.s.s.w.a.i.FilterSecurityInterceptor : авторизованный вызов фильтра [GET /password/ldap] с атрибуты [аутентифицированные]

2022-07-07 13:04:27.470 TRACE 81968 --- [nio-8080-exec-2] o.s.s.w.a.i.FilterSecurityInterceptor: не переключил аутентификацию RunAs, поскольку RunAsManager вернул ноль

2022-07-07 13:04:27.470 DEBUG 81968 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy: Защищенный GET /password/ldap

2022-07-07 13:04:27.471 TRACE 81968 --- [nio-8080-exec-2] o.s.s.a.i.a.MethodSecurityInterceptor: не выполнена повторная аутентификация UsernamePasswordAuthenticationToken [Principal=LdapUserDetailsImpl [Dn=cn=ivr_apl_user, ou=IVR,ou =Применения,dc=pre,dc=aplssib; Имя пользователя = ivr_apl_user; Пароль=[ЗАЩИЩЕНО]; Включено=истина; AccountNonExpired=истина; CredentialsNonExpired=истина; AccountNonLocked=истина; Предоставленные полномочия = [AGNI_OIMIVR]], Учетные данные = [ЗАЩИЩЕНО], Аутентифицировано = true, Подробности = WebAuthenticationDetails [RemoteIpAddress = 0:0:0:0:0:0:0:1, SessionId = null], Предоставленные полномочия = [AGNI_OIMIVR] ]] перед авторизацией

2022-07-07 13:04:27.472 TRACE 81968 --- [nio-8080-exec-2] o.s.s.a.i.a.MethodSecurityInterceptor: Авторизация ReflectiveMethodInvoke: public org.springframework.http.ResponseEntity es.ssib.dtic.oimivr.service.ws.v1.ServicioPassword.getLdap(); цель имеет класс [es.ssib.dtic.oimivr.service.ws.v1.ServicioPassword] с атрибутами [ROLE_AGNI_OIMIVR]

2022-07-07 13:04:27.475 TRACE 81968 --- [ nio-8080-exec-2] o.s.s.a.ia.MethodSecurityInterceptor: не удалось авторизовать ReflectiveMethodInvoke: public org.springframework.http.ResponseEntity es.ssib.dtic.oimivr.service.ws.v1.ServicioPassword.getLdap(); цель имеет класс [es.ssib.dtic.oimivr.service.ws.v1.ServicioPassword] с атрибутами [ROLE_AGNI_OIMIVR] с использованием AffirmativeBased [DecisionVoters=[org.springframework.security.access.annotation.Jsr250Voter@6797e2e2, org.springframework. Security.access.vote.RoleVoter@2ab76862, org.springframework.security.access.vote.AuthenticatedVoter@152f6a2e], AllowIfAllAbstainDecisions=false]

2022-07-07 13:04:27.484 TRACE 81968 - -- [nio-8080-exec-2] o.s.s.w.a.ExceptionTranslationFilter : Отправка UsernamePasswordAuthenticationToken [Principal=LdapUserDetailsImpl [Dn=cn=ivr_apl_user,ou=IVR,ou=Applicaciones,dc=pre,dc=aplssib; Имя пользователя = ivr_apl_user; Пароль=[ЗАЩИЩЕНО]; Включено=истина; AccountNonExpired=истина; CredentialsNonExpired=истина; AccountNonLocked=истина; Предоставленные полномочия = [AGNI_OIMIVR]], Учетные данные = [ЗАЩИЩЕНО], Аутентифицировано = true, Подробности = WebAuthenticationDetails [RemoteIpAddress = 0:0:0:0:0:0:0:1, SessionId = null], Предоставленные полномочия = [AGNI_OIMIVR] ]] для доступа к обработчику отказа, поскольку доступ запрещен

org.springframework.security.access.AccessDeniedException: Acceso denegado

at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:73) ~[spring-security-core-5.7.1.jar:5.7.1]

в org.springframework .security.access.intercept.AbstractSecurityInterceptor.attemptAuthorization(AbstractSecurityInterceptor.java:239) ~[spring-security-core-5.7.1.jar:5.7.1]

[...]

2022-07-07 13:04:27.497 DEBUG 81968 --- [nio-8080-exec-2] o.s.s.w.access.AccessDeniedHandlerImpl: ответ с кодом состояния 403
Что я делаю не так?


Подробнее здесь: https://stackoverflow.com/questions/728 ... -boot-rest
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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