Spring Security에서 역할 권한 부여 수정
Spring Security는 강력한 권한 부여 메커니즘을 제공하지만 잘못된 구성은 보안 취약성을 초래할 수 있습니다. 이 문서에서는 제한된 역할을 가진 사용자가 관리자용으로 예약된 리소스에 액세스할 수 있는 일반적인 문제를 다룹니다.
제공된 코드 조각은 메모리 내 인증과 JDBC 인증을 모두 사용하여 Spring Security를 구성합니다. 문제는 선택한 사용자 이름, 비밀번호, 사용자 이름=? 쿼리에 따르면 실제 범인은 다른 곳에 있습니다.
문제는 AuthorizeRequests() 메서드의 일치자 순서에서 비롯됩니다. Spring Security는 매처를 순서대로 평가하고 첫 번째 일치에 따라 인증 결정이 결정됩니다. 이 경우 다음 매처:
.anyRequest().authenticated()
역할 기반 매처 앞에 배치됩니다.
.antMatchers("/users/all").hasRole("admin")
결과적으로 사용자가 인증되는 한 모든 요청이 승인됩니다. , 역할에 관계없이. 이 문제를 해결하려면 역할 기반 일치자가 우선하도록 일치자를 다시 정렬하세요.
protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .httpBasic() .and() .authorizeRequests() .antMatchers("/users/all").hasRole("admin") .anyRequest().authenticated() .and() .formLogin() .and() .exceptionHandling().accessDeniedPage("/403"); }
이 수정된 구성을 사용하면 "사용자" 역할만 가진 사용자는 "/users/all"에 대한 액세스가 거부됩니다. "관리자" 역할을 가진 사용자는 액세스 권한을 갖습니다.
의도한 보안 정책이 적용되도록 Spring Security 인증을 구성할 때 일치자의 순서를 기억하는 것이 중요합니다. 시행됩니다.
위 내용은 Spring 보안 역할 기반 인증이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!