스프링 시큐리티 필터

2024. 5. 15. 17:03카테고리 없음

시큐리티 필터 이론

 

[Spring Security] Spring Security Filter Chain 에 대해

안녕하세요 오늘은 Spring Security 에서 인증,인가 과정을 담당하는 Security Filter Chain 에 대해 알아보겠습니다.Security Filter Chain 이란 Spring Security 에서 제공하는 인증,인가를 위한 필터들의 모음입니

velog.io

 

 

우리는 이전에 필터에 대해서  공부했다.

FilterRegistrationBean 을 사용하여 필터를 등록했었다.

이렇게 등록된 필터들은 여러 필터들이 모여 체인을 형성한다.

서블릿 컨테이너가 요청 URI 경로를 보고 필터를 거친다.

 

 

이러한 서블릿 필터중 delegatingFiilterProxy가 있고 해당 필터 내부에는 delegatingFiilterProxy의 작업을 위임받아 처리하는 FilterChainProxy가 있다.

우리가 보통 securityConfig를 할때 등록되는 필터들은 이 filterChainProxy에 등록된다고 생각할 수 있다.

 

 

filterChainProxy의 필터 종류

 

기본적으로 수많은 기본 필터들이 존재한다.

우리가 config할때 UsernamePasswordAuthenticationFilter 앞에 커스텀한 jwt 필터를 추가할때가 있는데

filterChainProxy을 알아야 어느 위치에 어떤 필터를 추가할지 알 수 있다.

 

위의 그림에서 Spring Security 을 위한 설정 클래스임을 정의하기 위해 WebSecurityConfigurerAdapter라고 정의되어있지만 과거 방식이고

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception

위의 함수를 통해 빈을 직접 정의해야한다.

 

일반적인 동작 과정

1. Security Context 복원 혹은 생성

2. 사용자 이름과 비밀번호를 추출하여 UsernamePasswordAuthenticationToken 객체를 생성

3. 인증 매니저가 토큰을 처리할 수 있는 인증 프로바이더를 찾고 토큰 처리를 위임

4. userDetailService에서 회원 정보 로드

5. UsernamePasswordAuthenticationToken과 회원 정보를 비교

5. 성공시 Authentication 객체를 만들어 Security Context에 보관

6. HttpSession 의 Attribute에 Security Context 저장

 

단순히 2가지 필터만 놓고 봤을때

SecurityContextPersistenceFilter 시작 -> UsernamePasswordAuthenticationFilter 시작 ->

인증 객체 컨텍스트에 저장-> UsernamePasswordAuthenticationFilter 끝 ->

컨텍스트 저장 -> SecurityContextPersistenceFilter 끝 

 

 

 

Security Context?  Authentication ?

우리가 로그인하면 필터링을 하면서 정보를 검증하고 성공하면 Authentication 객체를 만든다. 

이를 서버에서 전역적으로 접근 가능하도록 저장소에 이를 보관해야하고 이 저장소를 ThreadLocal에 저장시켜 전역적으로

접근 가능하도록 만들어야한다. ThreadLocal을 가지는 객체가 Contextholder이고 인증 객체를 저장하는 것이 securityContext이다.

 

위에서는 2가지 필터만 놓고 봤지만 더 다양한 필터가 존재하고 더 다양한 로직((세션 관리, 페이지 생성, 로그아웃 ,  캐시 등)이 존재한다.

 

SecurityContextPersistenceFilter

LogoutFilter

UsernamePasswordAuthenticationFilter

DefaultLoginPageGeneratingFilter

BasicAuthenticationFilter

RequestCacheAwareFilter

SecurityContextHolderAwareRequestFilter

AnonymousAuthenticationFilter

SessionManagementFilter

ExceptionTranslationFilter

FilterSecurityInterceptor

 

시큐리티 권한 설정

 

 

[Security] 로그인과 권한 설정

주의 : Spring Security 5.7+ (Spring Boot 2.7+)부터는 WebSecurityConfigurer이 Deprecated 되었다. 2022.09.05 - [Spring/Security] - [Security] WebSecurityConfigurerAdapter Deprecated [Security] WebSecurityConfigurerAdapter Deprecated 버전 Java 11 S

twer.tistory.com

따라가면 jwt 관련 내용 나옴

 

[Spring] Spring Security를 이용한 로그인 구현 (스프링부트 3.X 버전) [1] - 동작 원리 및 Config 설정

스프링 부트 3.0 이상 버전의 시큐리티 사용법 및 바뀐 Config 작성법을 다루고 있습니다.

velog.io