>Java >java지도 시간 >Spring 보안 역할 기반 인증이 실패하는 이유는 무엇입니까?

Spring 보안 역할 기반 인증이 실패하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-09 02:28:09954검색

Why Are My Spring Security Role-Based Authorizations Failing?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.