이전 포스팅까지 간단한 인증과 인가에대한 개념과 JWT 발급에대해 언급했습니다. 이제 이 토큰을 가지고 인증과 인가를 어떻게 하는지에 대해 정리해 보려 합니다.
Spring security
Spring Security는 Java 기반의 보안 프레임워크이다. 이 프레임워크로 인증과 인가를 관리하려 합니다.
Spring Security 6.0 버전 기준으로 WebSecurityConfigurerAdapter를 완전 사용할 수 없게 됐다고 한다. 공부 이전에 deprecated 되어 따로 언급은 하지 않겠습니다.
이제 Spring Security의 SecurityFilterChain이라는 필터 객체를 사용합니다.
Security Filter Chain: Spring Security는 여러 개의 보안 필터를 체인 형태로 구성하여 요청에 대한 보안 처리를 수행합니다. 각 필터는 특정한 보안 작업을 수행하며, 필요한 경우 커스터마이징할 수 있습니다.
Security의 구조
우선 간단히 서블릿 컨테이너의 작동방식은 다음과 같습니다.
서블릿 컨테이너는 클라이언트 요청을 받는다.
해당 요청이 어떤 웹 애플리케이션으로 가야 하는지 결정하고, 필터와 서블릿을 연결하여 작업을 처리합니다.
필터는 요청 전후에 작업을 수행하고, 서블릿은 요청을 처리하고 응답을 생성합니다.
이후 필터가 다시 응답을 후처리하여 클라이언트에 전달됩니다.
(이를 통해 보안, 로깅, 인코딩 등 다양한 작업을 처리하며 웹 애플리케이션을 관리합니다.)
그림에서 DelegatingFilterProxy는 스프링에서 제공하는 필터입니다. 이 필터는 프록시 역할을 하기때문에 필터체인에 속하지않은 객체를 필터로 등록하고 작동시킬수 있도록 해줍니다.
FliterChainProxy
DelegatingFilterProxy
와 같은 프록시 기능을 수행합니다.
하지만 DelegatingFilterProxy와 다른점이 존재합니다.
핵심 보안 필터 체인을 관리하는 데 사용됩니다.
보안 필터 체인에는 여러 개의 보안 필터가 연결되어 있으며, 이 필터들이 요청에 대한 보안 작업을 처리합니다.
FilterChainProxy는 보안 필터 체인의 역할을 수행하고, 각 요청마다 필요한 보안 필터들을 순차적으로 실행합니다.
SecurityFilterChain
필터들이 묶여있는 필터 체인으로 여러개 존재할 수 있는 구조입니다. FilterChainProxy를 통해 요청에 매칭됩니다.
요약
DelegatingFilterProxy:
FilterChainProxy:
서블릿 컨테이너는 클라이언트의 요청을 받아 서블릿 또는 필터로 전달하게 됩니다. 필터는 요청과 응답을 필터링하여 처리하며, Spring Security의 DelegatingFilterProxy는 요청을 Spring의 ApplicationContext로 전달하고 FilterChainProxy를 통해 보안 기능을 처리합니다.
FilterChainProxy는 Spring Security의 핵심 보안 기능을 담당하는 여러 보안 필터들의 체인입니다.