스프링 시큐리티(Spring security) 는 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다.
인증(authentication) : 사용자의 신원을 입증하는 과정
예를들어 ) 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정을 인증이라 한다.
인가(authorization) 는 인증과는 다릅니다.....
인가는 사이트의 특정 부분에 접근할 수 있는지 권한을 확인하는 작업입니다.
예를들어 ) 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없습니다. 이런 권한을 허가인하는 과정을 인가 라고 합니다.
인증과 인가 관련 코드를 아무런 도구의 도움 없이 작성하려면 굉장히 많은 시간이 필요한데요, 스프링 시큐리티를 사용하면 아주 쉽게 처리할 수 있습니다.
스프링 시큐리티는 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크입니다.
CSRF 공격 : 사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격.
세션 고정 공격 : 사용자의 인증 정보를 탈취하거나 변조하는 공격.
위와 같은 장점 토대로 개발자가 보안 관련 개발을 해야하는 부담을 크게 줄여줄수가 있습니다.
스프링 시큐리티는 필터 기반으로 동작합니다. 스프링 시큐리티의 필터 구조를 살펴보며 어떤 필터가 동작하는지 알아보겠습니다.
스프링 시큐리티의 필터 구조가 굉장히 복잡하지만
이 구조는 스프링 시큐리티를 사용하려면 알아야 하는 내용입니다.
스프링 시큐리티는 다양한 필터들로 나누어져 있으며, 각 필터에서 인증, 인가와 관련된 작업을 처리합니다.
SecurityContextPersistenceFilter부터 시작해서 아래로 내려가며 FilterSecurityInterceptor까지 순서대로 필터를 거칩니다. 필터를 실행할 때는 빨간색 화살표로 연결된 오른쪽 박스의 클래스를 거치며 실행합니다. 특정 필터를 제거하거나 필터 뒤에 커스텀 필터를 넣는 등의 설정도 가능합니다.
여기서 눈 여겨볼 필터는 왼쪽 3번째와 마지막입니다.
UsernamePasswordAuthenticationFilter 는 아이디와 패스워드가 넘어오면 인증 요청을 위임하는 인증 관리자 역할을 합니다.
FilterSecutiryInterceptor는 권한 부여 처리를 위임해 접근 제어 결정을 쉽게 하는 접근 결정 관리자 역할을 합니다.