윤개발
Spring Security 공식 문서 정리 본문
스프링 시큐리티에 대해 제대로 알고 쓰기위해 공식문서를 쭉 읽어보았고 개발시에 알아야될 부분을 정리해보았습니다.
docs.spring.io/spring-security/site/docs/5.4.6/reference/html5/#servlet-architecture
Servlet Security 기본 구조
스프링 시큐리티는 Servelt 필터에 기반합니다. 필터란 HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며 클라이언트에게 오는 요청 정보를 알맞게 변경하기도 합니다. 아래 그림은 싱글 HTTP 요청에 대한 전형적인 레이어 구조입니다.
클라이언트가 애플리케이션으로 요청을 보내면 스프링 컨테이너는 URI 경로에 기반한 Servlet, Filter를 포함한 필터체인을 생성하고 필터체인을 따라가며 처리됩니다.
DelegatingFilterProxy, FilterChainProxy
스프링은 Filter를 구현한 DelegatingFilter를 제공합니다. DelegatingFilter는 서블릿컨테이너와 스프링 컨테이너 사이에 다리를 제공하는 필터인데 이는 스프링 컨테이너에서 특정 빈을 찾아 그 빈에게 요청을 위임하기 위함입니다.
스프링 시큐리티는 FilterChainProxy라는 특별한 필터 빈를 제공하며 DelegatingFilterProxt에게 요청을 위임받아 실제 보안을 처리합니다. 두개의 프록시는 아래 그림과 같은 구조로 이루어져있습니다.
SecurityFilterChain
아래 그림과 같이 SecurityFilterChain은 여러개로 구성되어 있으며 URL에 따라 다른 필터체인이 적용됩니다.
Handling Security Exceptions
필터 체인중의 하나인 ExceptionTranslationFilter는 다음과 같은 구조로 동작합니다.
- 처음으로 ExceptionTranslationFilter가 호출됩니다.
- 만약 유저가 로그인하지 않았거나 AuthenticationException이 발생했다면 인증을 시작합니다.
AuthenticationEntryPoint는 로그인 페이지로 리다이렉트 하는 등의 유저에게 인증 요청을 보낼때 사용합니다. - 유저의 요청이 RequestCache에 저장되고 유저가 성공적으로 로그인 한다면 다시 저장된 요청을 다시 원래 요청으로 만들어 진행됩니다.
- 만약 거부된 요청이라면 HandleAccessDenied를 호출합니다.
인증에 관한 컴포넌트
스프링 시큐리티에서 인증을 이용하기 위해 알아야할 클래스 및 인터페이스
- SecurityContextHolder - 인증된 사용자가 저장되는 저장소
- SecurityContext - SecurityContextHolder 와 Authentication 을 포함
- Authentication - 사용자가 인증을 위해 제공한 자격증명 또는 현재 사용자의 증명을 제공
- GrantedAuthority - 부여된 권한
- AuthenticationManager - 스프링이 어떻게 인증을 할지 정의한 인터페이스
- ProviderManager - AuthenticationManager 실제 구현 객체 AuthenticationProvider 중에 인증이 가능한 인터페이스를 찾음
- AuthenticationProvider - 인터페이스이며 ProviderManager 가 인증이 가능한 구현 객체를 찾음
- Request Credentials with AuthenticationEntryPoint - 클라이언트에게 인증을 요청(redirecting to a log in page, sending a WWW-Authenticate response 등)
- AbstractAuthenticationProcessingFilter AuthenticationProvider 를 구현한 인증을 위한 기본 제공 필터
포스팅중
'백엔드 > 스프링' 카테고리의 다른 글
스프링의 컴포넌트 스캔 (0) | 2021.05.10 |
---|---|
웹어플리케이션과 싱글톤 (0) | 2021.05.10 |
Api 정상, 에러 응답 공통 포맷 개발 (0) | 2021.04.28 |
Spring Security 원리 및 방식 정리 (0) | 2021.03.22 |
스프링 부트 알아보기 (0) | 2019.10.15 |