Post

스프링 시큐리티란





Spring Security

  • 인증과 인가를 포함한 보안의 기능을 제공하는 스프링 프로젝트이다.
  • Authentication
    • 인증
    • 사용자에 대한 검증
  • Authorization
    • 인가
    • 검증된 사용자에 대한 서비스 접근 권한





Spring Security Architecture

스프링 시큐리티의 기본 구조이다. 이 포스팅에서는 Spring MVC와 사용되는 Spring Security의 구조를 다룬다.


img-description 스프링 시큐리티 아키텍처


  1. DelegatingFilterProxy
    • 스프링에서 제공하는 Filter의 구현체이다.
    • 얘는 서블릿 컨테이너의 필터 체인 안에 스프링 빈 필터들을 침투 시키는 역할이다.
    • 서블릿 컨테이너와 스프링 빈의 역할을 동시에 할 수는 없다.
    • 얘는 서블릿 필터로써 위치하고, 실제 로직은 스프링 빈을 호출하여 위임한다.
      • Dependency Look-up으로 스프링 빈인 FilterChainProxy를 호출한다.
  2. FilterChainProxy
    • 얘부터는 서블릿 컨텍스트가 아닌 스프링 컨텍스가 관리하는 스프링 빈이다.
    • 얘는 SecurityFilterChain을 우루루 갖고 있고,
    • 요청 uri에 맞는 적합한 SecurityFilterChain을 찾아내 작업을 위임한다.
    • 얘의 역할은 스프링 시큐리티의 도입부가 되어 준다.
      • 좋은 디버거 포인트가 된다.
      • 메모리 누출을 막거나, 외부 공격에 대한 방화벽 등 핵심적인 역할을 한다.
      • SecurityFilterChain의 호출을 결정할 때, 유연성을 준다.
  3. SecurityFilterChain
    • 얘는 설정에 따라 1개 이상이 생성된다.
    • 요청 uri에 따라 설정을 달리하면, 요청마다 필요한 동작을 수행하는 필터들을 다르게 갖는다.
      • 예를 들어,
        • 인증이 필요없는 index 페이지의 경우 필터가 많이 필요하지 않다.
        • 인증이 필요한 정보 페이지의 경우 인증을 위한 필터가 더 들어가게 된다.
    • 서블릿의 필터처럼 순서에 따라 하나하나 작업을 수행한다.
  4. 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.