Spring

SpringSecurity 아키텍쳐이해하기

쭈녁 2024. 2. 24. 21:03

Spring Security 란

 

Spring Security는 접근제어, 인증, 인가의 기능을 수행한다.

 

이 기능을 수행할 때 아래와 같은 절차로 시행된다.

 

  • 인증(Authentication):
    • 사용자가 시스템에 접근하려 할 때 그들의 신원을 확인하는 과정. 
  • 인가(Authorization):
    • 인증된 사용자가 특정 자원이나 데이터에 접근하거나 특정 작업을 수행할 수 있는 권한을 부여받는 과정
    • 사용자의 역할, 접근 정책, 권한 등에 따라 결정됨.
  • 감사(Auditing):
    • 접근 시도와 실제 접근에 대한 기록을 유지하는 과정.
    • 보안 위반 시도를 추적 및 시스템의 보안 상태를 평가

 

 

Spring Security는 Servlet 모듈과 WebFlux 각각에 대한 모듈을 나누어 제공한다.

 

- Servlet 기반(Spring MVC):  >>  tomcat

  • 전통적인 Servlet API에 기반하며, 각 HTTP 요청을 처리하기 위해 별도의 스레드를 사용하는 동기적 블로킹 모델을 따른다.
  • 클라이언트로부터의 요청이 들어올 때마다 서버는 요청을 처리할 스레드를 할당하고, 해당 요청의 처리가 완료될 때까지 스레드는 블로킹 상태가 된다.   

 

- Spring WebFlux (비동기 및 논블로킹):  >>  netty

  • Reactor를 기반으로 하는 비동기 및 논블로킹 I/O 모델을 사용.
  • 이 접근 방식은 클라이언트 요청을 처리할 때 스레드를 효율적으로 사용할 수 있게 해 주며, 하나의 스레드가 여러 요청을 비동기적으로 처리할 수 있다. (고성능과 확장성이 요구되는 환경에서 유리)

 

** Spring Security의 Servlet 모듈 Filter를 기반으로 돌아간다. 

 

Security 아키텍쳐

 

DelegatingFilterProxy 

DelegatingFilterProxy 기본 구조

 

  • 서블릿 컨테이너와 스프링 컨테이너를 연결해 주는 역할.
  • 실제 수행할 작업은 Spring Container의 Bean에 위임.
  • 이를 통해 Spring의 이점(DI 등)을 그대로 가져가면서 서블릿 `Filter`를 정의.
  • 단,  스프링 부트에서는 Filter 구현체 Bean 만으로도 등록 가능.

 

ServletContainer와 SpringContainer 구조도

ServletContainer와 SpringContainer간의 구조도

FilterChainProxy

  • Spring Security에서 정의한 Filter 
  • SecurityFilterChain을 통해 다수의 Filter에 수행 작업을 위임하는 것이 가능 
  • Bean으로 관리되며, DelegatingFilterProxy 인터페이스에 래핑.

 

SpringSecurity의 최종 아키텍처

SpringSecurity의 최종 아키텍쳐

SecurityFilterChain

 

  • 특정 요청에 대한 `Security Filter`의 집합
  • 단순한 Bean이며, `DelegatingFilterProxy`에 의해 등록되지 않고, `FilterChainProxy`에 의해 등록

 

Security Filter

 

  • `SecurityFilterChain`을 구성하는 `Filter`입니다.
  • 인증, 인가, 보안 취약점 방어 등 다양한 목적에 따라 사용.
  • 인가 전에는 반드시 인증이 되어야 하듯이 필터 간 순서에 대한 정의도 필요.

 

ExceptionTranslationFilter :

권한과 관련된 `Exception`을 HTTP 응답으로 변환(AccessDeniedException , AuthenticationException)

 

ExceptionTranslationFilter

 

  • `AuthenticationException` 이 발생한 경우 요청을 캐싱하고 인증을 재시도. 
  • `AccessDeniedException` 이 발생한 경우 `AcessDeniedHandler`를 통해 처리.

 

References

스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - https://www.inflearn.com/course/%EC%BD%94%EC%96%B4-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/dashboard

스프링 공식 문서 - https://docs.spring.io/spring-security/reference/servlet/architecture.html#servlet-filters-review

 

 

'Spring' 카테고리의 다른 글

SpringSecurity 인증 방식  (0) 2024.03.02
SpringSecurity 인증  (0) 2024.03.01
N+1 문제 해결(JPA)  (1) 2024.02.12
N+1 해결 (QueryDSL)  (0) 2024.02.11
프로젝트 QueryDSL 적용기  (0) 2024.02.08