Spring Security
Spring기반 애플리케이션에서 보편적으로 사용되며, 인증과 권한 부여를 제공하는데 중점을 둔 보안 프레임워크입니다.
인증 ( Authentication ) - 사용자가 누구인지 확인하는 과정
인가 ( Authorization ) - 인증된 사용자가 어떠한 자원에 접근할 수 있는 권한을 부여하는 과정
Servlet Filter
Spring Security는 Servlet Filter를 기반으로 하고 있습니다.

Filter는 요청과 읍당에 대한 정보들을 변경할 수 있게 개발자들에게 제공하는 Servlet Container입니다.
FilterChain은 이러한 Filter들이 체인처럼 서로 연결되어 연쇄적으로 동작합니다.
Spring Security 구조

- DelegatingFilterProxy
- 사용자가 처음 요청을 하면 이곳에서 가장 먼저 요청을 받고, FilterChainProxy에게 요청을 위임합니다.
- DelegatingFilterProxy는 ServletFilter이며 위임을 할 때에는 "SpringSecurityFilterChain"이라는 이름을 가진 Bean( FilterChainProxy )을 먼저 찾습니다.
- FilterChainProxy
- DelegatingFilterProxy으로부터 요청을 위임받아 실제 보안 처리하는 곳입니다
- Spring Security 초기화 시 생성되는 필터들을 관리하고 제어합니다.
- 사용자의 요청을 필터 순서대로 호출하여 전달합니다.
- 마지막 필터까지 예외가 발생하지 않으면 보안 통과합니다.
- SpringSecurityFilterChain
- 이 FilterChain에는 여러 필터들이 존재하는 데 몇 가지만 확인해 보겠습니다.
- 종류
- LogoutFilter : 로그아웃 요청 시에만 실행
- UsernamePasswordAuthenticationFilter : 인증 객체를 만들어서 ID, PW를 저장하고 AuthenticationManager에게 인증처리를 맡깁니다.
- ExceptionTranslationFilter : 인증, 인가 예외가 발생할 경우 실행되며, 인증과 인가의 예외 (AccessDeninedException, AuthenticationException)를 처리합니다.
- 큰 틀

Spring Security 동작

- Request가 들어오면 AuthenticationFilter에서 인증과 인가를 진행합니다.
- 허가받지 않은 요청이 DispatcherServlet에서 처리되는 것을 방지해 줍니다.
- 토큰 기반 인증 방식으로 처리합니다. (UsernamePasswordAuthenticationToken)
- Request의 Header에서 토큰을 받아 해당 토큰을 decoding 한 후 Authentication 처리
- 해당 함수에서 반환된 객체는 Authentication 객체로 처리됩니다.
- AuthenticationManager로 인증 수행과정이 넘어가게 됩니다.
- "Authentication Manager"는 스프링 보안의 필터가 인증을 수행하는 방법을 정의하는 API입니다.
- "ProviderMananger"가 AuthenticatoinManager를 implement 하고 있으며, Authentication을 수행하는 주체는 ProviderManger입니다.
- AuthenticatoinManager는 Provider를 기반으로 인증을 수행하려고 합니다.
- Provider에서는 인증에 관련된 논리를 구현하려고 합니다.
- 이때의 Provider는 하나 또는 여러 개가 존재할 수 있습니다.
- Provider 중 하나인 CustomAuthenticationProvider는 인증 객체에서 이름과 패스워드를 가져와서 사용자를 검증
- 이때, 사용하는 것이 UserDetailService입니다.
- UserDetailsService는 User의 정보를 가져오는 부분입니다.
- 이때, loadUserByUsername을 오버라이딩해야 하며, 이 부분에서 반환값은 UserDetail인데 UserDetail은 AutheticationToken을 만들 때 사용됩니다.
- AuthenticationToken을 이용해 AuthenticationProvider는 User를 만들고 이를 바탕으로 인증이 완료된 객체를 생성하고 반환합니다.
- 인증이 완료된 객체는 다시 거꾸로 넘어와 최종적으로 SecurityContext에 등록하게 됩니다.
참고
[스프링 시큐리티] 필터(DelegatingFilterProxy, FilterChainProxy)
※ 이 글은 정수원님의 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security 강의를 수강하면서 학습한 내용을 정리한 글입니다. 일부 강의 내용을 인용하였으며, 문제가 될 시 인용 부분
soojae.tistory.com
Spring Security, 제대로 이해하기 - FilterChain
Spring Security의 인증, 인가 과정을 FilterChain을 살펴보며 이해하는 것이 본 포스팅의 목표입니다. 해당 포스팅은 1부 Spring Security, 어렵지 않게 설정하기의 이은 포스팅이지만, 읽는데 순서는 상관
gngsn.tistory.com
https://me-analyzingdata.tistory.com/entry/Spring-Spring-Security%EC%9D%98-%EC%9D%B4%ED%95%B4
[Spring] Spring Security의 이해
Spring Security는 자바 어플리케이션에서 인가와 인증을 제공하는 것에 초점을 맞춘 프레임 워크이다. 스프링에서 주장하기로는 Spring security의 확장성이 매우 큰 장점이라고 한다. 근데 사실 Spring s
me-analyzingdata.tistory.com
'개발 지식' 카테고리의 다른 글
| mysql과 mysql2 차이 (0) | 2024.07.02 |
|---|---|
| Spring batch 5.0 간단한 구현 (1) | 2023.12.22 |
| Spring batch 알아보기 (0) | 2023.12.14 |