인증에 사용되는 API
사용자의 인증 과정에서 사용되는 스프링 시큐리티의 내부 클래스들은 역할에 따라
크게 2가지로(인증 처리 담당, 인증된 사용자 정보 생성 및 관리 담당) 구분할 수 있습니다.
인증 처리 담당
- AuthenticationFilters:
- 역할: 요청에 대한 인증 처리를 수행하는 필터들입니다. UsernamePasswordAuthenticationFilter, BasicAuthenticationFilter 등이 여기에 해당합니다.
- 작동 방식: 사용자로부터 제공된 인증 정보(예: 사용자 이름과 비밀번호)를 수집하고 이를 기반으로 인증을 시도합니다.
- ExceptionTranslationFilter:
- 역할: 인증 과정에서 발생할 수 있는 예외를 처리하고, 적절한 오류 페이지로 리다이렉트 하는 등의 작업을 수행합니다.
- 작동 방식: 예외가 발생하면 이를 캡처하여 인증 실패 등의 상황에 적절히 대응합니다.
- AuthenticationProvider:
- 역할: 인증 정보를 실제로 검증하고, 인증된 사용자를 생성합니다. DaoAuthenticationProvider와 같은 구현체가 여기에 해당합니다.
- 작동 방식: Authentication 객체를 입력으로 받아 인증을 수행하고, 인증이 성공하면 Authentication 객체를 반환합니다.
- SecurityContextPersistenceFilter:
- 역할: SecurityContextHolder에 저장된 SecurityContext를 요청 간 유지하는 역할을 수행합니다.
- 작동 방식: 기존 요청에서 저장된 인증 정보를 유지하고, 요청이 끝날 때 SecurityContext를 정리합니다.
- RememberMeAuthenticationFilter :
- 역할: Remember-Me 기능을 제공하여 사용자가 로그인 정보를 유지할 수 있도록 합니다.
- 작동 방식: 쿠키 기반 인증을 수행하며, 사용자가 인증을 다시 하지 않아도 되도록 처리합니다.
인증된 사용자 정보 생성 및 관리 담당
- SecurityContextHolder:
- 역할: 현재의 보안 컨텍스트를 보관하고 제공하는 클래스입니다. 현재 인증된 사용자의 정보를 저장하고 접근할 수 있게 합니다.
- 작동 방식: SecurityContext 객체를 스레드 로컬에 저장하여 현재 스레드에서 접근 가능하게 합니다.
- Authentication:
- 역할: 사용자 인증 정보를 나타내는 인터페이스입니다. 인증된 사용자의 정보와 인증 상태를 포함합니다.
- 작동 방식: 사용자 이름, 권한, 인증된 여부 등의 정보를 담고 있으며, SecurityContextHolder를 통해 접근할 수 있습니다.
- UserDetails:
- 역할: 인증된 사용자의 세부 정보를 담는 인터페이스입니다. 사용자 이름, 비밀번호, 권한 등을 포함합니다.
- 작동 방식: 스프링 시큐리티는 이 인터페이스를 사용하여 사용자 정보를 관리하고, 인증 과정에서 이를 참조합니다.
- UserDetailsService:
- 역할: UserDetails 객체를 반환하는 서비스 인터페이스입니다. 사용자 이름을 기반으로 UserDetails 객체를 로드합니다.
- 작동 방식: 사용자 이름을 입력으로 받아, 데이터베이스 등에서 사용자 정보를 조회하여 UserDetails 객체를 반환합니다.
- UserDetailsManager:
- 역할: UserDetails 객체를 관리하는 인터페이스입니다. 사용자의 추가, 삭제, 업데이트 작업을 처리합니다.
- 작동 방식: UserDetailsService와 유사하지만, 사용자 정보를 수정하거나 삭제하는 기능도 포함됩니다.
필터 기반의 인증 처리 흐름
사용자가 요청을 보냄 → Servlet FilterChain을 거쳐 SecurityFilterChain에서 인증 수행 → DispatcherServlet이 컨트롤러에 요청 전달 → 비즈니스 로직을 수행하고 DB에서 데이터를 조회 → 최종적으로 응답이 브라우저로 반환
정리해보면..
Spring Security는 강력한 인증 및 권한 관리를 제공하며
요청이 필터 체인을 거쳐 보안 검사를 수행하는 방식으로 동작합니다.
- Servlet FilterChain을 통해 요청을 가로채고 보안 필터를 거쳐 인증을 수행합니다.
- SecurityContextHolder를 통해 인증 정보를 유지하며, 이후 요청에서도 동일한 사용자의 상태를 보장합니다.
- UserDetailsService를 이용해 사용자 정보를 관리하고, 필요시 DB에서 불러옵니다.
이와 같은 구조 덕분에 Spring Security는 확장성과 보안성을 보장하면서도 유연한 인증 및 권한 관리를 지원한다고 합니다.
'Back-End > Springboot' 카테고리의 다른 글
Spring Security Filter 대해 알아보자 (1) | 2025.01.21 |
---|---|
AOP 에 대해 알아보자 (0) | 2024.09.11 |
SpringBoot에서 Vue.js를 연동하고 실행해보자 (0) | 2024.05.04 |
[Spring boot] 간단한 회원가입 코드 구현해보기_2 (0) | 2024.04.07 |
[Spring boot] 간단한 회원가입 코드 구현해보기 (0) | 2024.03.13 |