Miracle Morning, LHWN

18-2. Spring Security 에 대해 (2) 본문

IT 기술/[JAVA] Spring Boot

18-2. Spring Security 에 대해 (2)

Lee Hye Won 2021. 6. 15. 05:40
DelegatingFilterProxy

 

Spring 은 Servlet Container (예. 톰캣) 의 생애주기 (LifeCycle) 와 Spring ApplicationContext 사이에서 연결할 수 있는

DelegatingFilterProxy 라는 필터를 제공한다.

 

기본적으로 스프링 서블릿 컨테이너 (Servlet Container) 는 자체 표준으로 제시하는 필터 등록을 허용한다. 하지만, Spring Bean 으로 정의되어 있는 필터는 제외하고 있다.

 

Spring Security 에서는 DelegatingFilterProxy 를 통해 표준 서블릿 컨테이너 메커니즘을 통해 등록하는 필터 뿐만 아니라,

Spring Bean 으로 구현한 모든 필터를 등록하고 위임하는 형태로 여과 작업을 진행한다.

 

https://docs.spring.io/spring-security/site/docs/current/reference/html5/#prerequisites

 

FilterChainProxy

 

Spring Security 의 실질적인 서블릿 지원은 FilterChainProxy 내에 포함되어 있다.

FilterChainProxy 는 Spring Security 에서 제공하는 특수 필터로 다양한 필터 인스턴스를 SecurityFilterChain 을 통해 위임한다.

FilterChainProxy 는 Spring Bean 이며, DelegatingFilterProxy 를 통하고 있다.

 

https://docs.spring.io/spring-security/site/docs/current/reference/html5/#prerequisites

 

SecurityFilterChain

 

SecurityFilterChain 의 Sercurity Filter 들은 기본적으로 Spring Bean 뿐만 아니라 DelegatingFilterProxy 라 할 수 있는 FilterChainProxy 에 등록할 수 있다. 이렇게 등록된 필터는 몇 가지 장점을 들 수 있다.

  • Spring Security Servlet 지원하는 모든 시작 지점에 필터 제공한다. Spring Security Servlet 트러블 슈팅 지원, FilterChainProxy 에 디버깅 시작 지점으로 사용하기 좋다.
  • FilterChainProxy 는 Spring Security 의 중심으로서 필수적인 것을 수행한다.

https://docs.spring.io/spring-security/site/docs/current/reference/html5/#prerequisites

 

 

여러 SecurityFilterChain 에서 FilterChainProxy 는 SecurityFilterChain 을 선택하고 사용한다.

SecurityFilterChain 이 동작하는 URL 을 등록하고 해당 요청이 있을 경우 FilterChainProxy 를 통해서 다수의 SecurityFilterChain 중 요청 URL 에 맞는 SecurityFilterChain 을 선택하고 실행하게 된다.

https://docs.spring.io/spring-security/site/docs/current/reference/html5/#prerequisites

 

 

Filter Stack

 

Spring Security 에서 Filter 는 기본적으로 Servlet Engine 의 Filter 인터페이스를 상속하게 된다. 추가적으로 Spring Security 에서는 여러 Filter 관련 인터페이스를 제공하고 있다.

 

https://docs.spring.io/spring-security/site/docs/current/reference/html5/#prerequisites

 

  1. ChannelProcessingFilter : which would force the login form and any access to the /secure path to be made over HTTPS (로그인에 관련되거나 /secure path 에서 HTTPS 로 강력하게 처리한다.)
  2. SecurityContextPersistenceFilter : SecurityContext 의 지속성을 위해 필요한 Filter 이다. HttpSession 의 Attribute 로 SecurityContext 가 저장되는데, 이렇게 이용자의 Request 에 SecurityContext, 즉 보안 관련된 설정 값 (인증정보 및 인가정보) 등을 영속하기 위해 필요한 Filter 이다.
  3. ConcurrentSessionFilter : 동시 세션의 수를 관리하고 설정에 따라 세션을 만료시키는 등의 동작을 수행하게 된다. 예를 들어 동일 아이디로 1명만 로그인이 가능하다 설정한 경우 새로이 인증하는 대상을 기준으로 동일 아이디로 인증되어 있는 대상의 세션을 만료시킨다거나, 새로 인증하려는 동일 아이디의 이용자를 인증하지 못하도록 반려한다거나 하는 식의 동작을 관리한다. 물론 1개 이상의 동일 아이디로 세션을 제한할 수도 있다.
  4. HeaderFilter : 헤더 값(HTTP 프로토콜의 헤더 정보)에 대한 가감을 설정할 경우 해당 필터를 활용하게 된다.
  5. CsrfFilter : CSRF(Cross-site Request Forgery) 는 취약점 공격중에 하나로 이용자의 의지와 무관하게 공격자가 의도하는 행위를 특정 사이트에 요청하게 되는 공격을 말한다. 이를 위하여 csrf token 을 발행하여 HTTP 를 통한 요청에 대해서 응답 내용으로 전송하고 이용자의 요청에도 해당 csrf token 을 확인하는 등으로 공격을 막는다. 이러한 CSRF 공격에 대하여 처리할 수 있는 Filter 이다.
  6. LogoutFilter : 로그아웃을 위해 필요한 Filter 이다.
  7. X509AuthenticationFilter : X.509는 암호학에서 공개키 인증서와 인증 알고리즘 표준에서 공개키 기반(PKI) 의 ITU-T 표준이다. 이를 처리하기 위한 Filter 이다.
  8. AbstractPreAuthenticationProcessingFilter : 사전 인증된 요청을 처리하는 필터를 위한 기본 클래스이다. 여기서 중요한 것은 인증의 주체가 이미 외부 시스템에 의해 인증되었다고 가정하고 해당 필터를 활용하게 된다.
  9. CasAuthenticationFilter : CAS(Central Authentication Service) 의 약자로 '중앙 인증 서비스' 라고 부르기도 한다. 즉, SSO 를 지원하는 별도의 인증 서비스라고 보면 된다. CAS 를 통한 인증 처리를 위해 CasAuthenticationFilter 가 제공된다. (이를 위해 존재하는 필터가 AbstractPreAuthenticationProcessingFilter 이다.)
  10. UsernamePasswordAuthenticationFilter : 기본적으로 이용자명(Username) 과 비밀번호 (Password) 를 기반으로 인증 처리를 위해 제공되는 Filter 이며, Spring Security 의 기본 필터이다.
  11. BasicAuthenticationFilter : HTTP 기본 인증을 처리하기 위해서 제공되는 HTTP Basic Authentication 필터이다.
  12. JaasApiIntegrationFilter : JAAS (Java Authentication and Authorization Service) 의 준말로 자바 프로그래밍 언어의 보안 프레임워크이며, JDK 1.4 이후 JRE에 통합되었다.
  13. RememberMeAuthenticationFilter : 세션이 사라지거나 만료되더라도 쿠키 또는 DB 를 사용하여 저장된 토큰 기반으로 인증을 처리하는 필터이다.
  14. AnonymousAuthenticationFilter : 익명자 처리를 위한 필터이다.
  15. SessionManagementFilter : 세션 변조 공격 방지 기능을 한다.
  16. ExceptionTranslationFilter : Spring Security 에서 인증 및 인가에 대한 예외 처리 필터이다.
  17. FilterSecurityInterceptor : 특정 리소스 즉 URI 로 접근하게 되면 최종 접근 전에 AccessDecisionManager 를 사용하여 인가 처리를 하는 필터이다.
  18. SwitchUserFilter : 이용자 전환 처리를 위한 필터로 이용자의 정보(Context) 를 전환하고자 하는 대상과 바꾼다. (로그아웃 - 로그인의 과정을 거치는 것이 아닌, 전환처리를 한다.)
Comments