Spring Security에서 역할 인증 수정
Spring Security를 활용할 때 역할 기반 액세스 제어는 리소스 보호에 매우 중요합니다. 최근 프로젝트에서 관리자가 아닌 사용자가 권한 있는 리소스에 액세스할 수 있는 문제가 발생했습니다. 문제의 근본 원인을 조사하고 이를 해결하기 위한 솔루션을 제공하겠습니다.
구성된 AuthenticationManagerBuilder는 사용자 인증 및 권한 검색을 위해 dataSource를 활용하는 JDBC 기반 인증 메커니즘을 활용합니다. 문제는 사용자 인증 쿼리에서 발생합니다.
"select username, password, 1 from users where username=?"
이 쿼리에서 "1"은 중요하지 않으며 사용자 식별을 위한 기본 키가 무시됩니다. 결과적으로 모든 사용자에게 실수로 동일한 역할이 할당되어 관리자가 아닌 사용자가 액세스 제한을 우회할 수 있습니다.
이 문제를 해결하려면 인증 쿼리에서 사용자와 연결된 역할 정보를 명시적으로 가져와야 합니다.
select username, password, role from users where username=?
또한 역할 기반 액세스 제어의 우선순위를 지정하려면 HTTP 보안 구성을 다음과 같이 수정해야 합니다. 다음:
@Override 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"); }
이 구성에서는 anyRequest() 일치자가 먼저 인증을 확인한 다음 "/users/all"에 대한 역할별 일치자를 확인합니다. 이렇게 하면 관리자가 아닌 사용자가 권한 있는 리소스에 대한 액세스가 거부되어 초기 문제가 해결됩니다.
이러한 수정을 구현하면 Spring Security의 역할 기반 액세스 제어가 올바르게 작동하여 보호된 리소스에 대한 무단 액세스를 방지할 수 있습니다.
위 내용은 관리자가 아닌 사용자가 권한 있는 리소스에 액세스할 때 Spring 보안 역할 인증 문제를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!