스프링 시큐리티란
Spring Security
- 인증과 인가를 포함한 보안의 기능을 제공하는 스프링 프로젝트이다.
- Authentication
- 인증
- 사용자에 대한 검증
- Authorization
- 인가
- 검증된 사용자에 대한 서비스 접근 권한
Spring Security Architecture
스프링 시큐리티의 기본 구조이다. 이 포스팅에서는 Spring MVC와 사용되는 Spring Security의 구조를 다룬다.
- DelegatingFilterProxy
- 스프링에서 제공하는 Filter의 구현체이다.
- 얘는 서블릿 컨테이너의 필터 체인 안에 스프링 빈 필터들을 침투 시키는 역할이다.
- 서블릿 컨테이너와 스프링 빈의 역할을 동시에 할 수는 없다.
- 얘는 서블릿 필터로써 위치하고, 실제 로직은 스프링 빈을 호출하여 위임한다.
- Dependency Look-up으로 스프링 빈인 FilterChainProxy를 호출한다.
- FilterChainProxy
- 얘부터는 서블릿 컨텍스트가 아닌 스프링 컨텍스가 관리하는 스프링 빈이다.
- 얘는 SecurityFilterChain을 우루루 갖고 있고,
- 요청 uri에 맞는 적합한 SecurityFilterChain을 찾아내 작업을 위임한다.
- 얘의 역할은 스프링 시큐리티의 도입부가 되어 준다.
- 좋은 디버거 포인트가 된다.
- 메모리 누출을 막거나, 외부 공격에 대한 방화벽 등 핵심적인 역할을 한다.
- SecurityFilterChain의 호출을 결정할 때, 유연성을 준다.
- SecurityFilterChain
- 얘는 설정에 따라 1개 이상이 생성된다.
- 요청 uri에 따라 설정을 달리하면, 요청마다 필요한 동작을 수행하는 필터들을 다르게 갖는다.
- 예를 들어,
- 인증이 필요없는 index 페이지의 경우 필터가 많이 필요하지 않다.
- 인증이 필요한 정보 페이지의 경우 인증을 위한 필터가 더 들어가게 된다.
- 예를 들어,
- 서블릿의 필터처럼 순서에 따라 하나하나 작업을 수행한다.
- Security Filter
- 실제로 동작을 수행하는 애들이다.
- 스프링에서 제공하는 기본 필터들이 많이 있으며, 설정에 따라 SecurityFilterChain에 등록된다.
- 스프링에서 제공하는 기본 필터들은 정해진 순서가 있으며, 순서는 매우 중요하다. (외울 필요는 없으나 알면 좋다고 한다.)
- 커스텀 필터를 만들 수도 있다.
- 커스텀 필터 역시 순서가 매우 중요하다.
Security Filter
스프링의 시큐리티 필터의 등록 순서이다.
시큐리티 쓰면서 자주 봤거나, 이거는 내가 알아야 하지 않을까 싶은 것들만 굵은 글씨로 적었다.
- ForceEagerSessionCreationalFilter
- ChannelProcessingFilter
- WebAsyncManagerIntegrationFilter
- SecurityContextPersistenceFilter
- HeaderWriterFilter
- CorsFilter
- CsrfFilter
- LogoutFilter
- OAuth2AuthorizationRequestRedirectFilter
- Saml2WebSsoAuthenticationRequestFilter
- X509AuthenticationFilter
- AbstractPreAuthenticatedProcessingFilter
- CasAuthenticationFilter
- OAuth2LoginAuthenticationFilter
- Saml2WebSsoAuthenticationFilter
- UsernamePasswordAuthenticationFilter
- OpenIDAuthenticationFilter
- DefaultLoginPageGeneratingFilter
- DefaultLogoutPageGeneratingFilter
- ConcurrentSessionFilter
- DigestAuthenticationFilter
- BearerTokenAuthenticationFilter
- BasicAuthenticationFilter
- RequestCacheAwareFilter
- SecurityContextHolderAwareRequestFilter
- JaasApiIntegrationFilter
- RememberMeAuthenticationFilter
- AnonymousAuthenticationFilter
- OAuth2AuthorizationCodeGrantFilter
- SessionManagementFilter
- ExceptionTranslationFilter
- FilterSecurityInterceptor
- SwitchUserFilter
This post is licensed under CC BY 4.0 by the author.