Spring Security의 구조(Architecture) 및 처리 과정 알아보기
by rowing0328Intro
스프링 프레임워크에서 보안 기능을 제공하는 강력한 라이브러리로,
인증(Authentication)과 권한 부여(Authorization)를 중심으로 애플리케이션을 보호한다.
이번에는 Spring Security의 구조와 주요 처리 과정을 단계별로 살펴본다.
Spring Security 란
스프링 시큐리티는 웹 애플리케이션 및 REST API의 보안을 관리하는 강력한 프레임워크로,
주요 기능은 다음과 같다.
- 인증 (Authentication)
사용자 신원 확원 - 권한 부여 (Authorization)
사용자 권한 및 접근 제어 - 보안 필터 (Security Filter)
요청이 들어올 때 적용되는 필터 체인 - 세션 관리 (Session Management)
인증된 사용자 관리 - CSRF 보호 (CSRF Protection)
CSRF 공격 방지 - OAuth 및 JWT 지원
OAuth2, JWT 기반 인증 지원
스프링 시큐리티의 핵심은 필터(Filter) 기반의 보안 처리이며,
요청이 들어오면 여러 개의 필터를 거쳐 최종적으로 인증 및 권한 부여가 수행된다.
Spring Security의 아키텍처
Spring Security의 아키텍처는 다음과 같은 주요 컴포넌트로 구성된다.
SecurityFilterChain (보안 필터 체인)
Spring Security는 여러 개의 보안 필터(Security Filters) 로 구성된 Filter Chain을 사용하여,
요청을 검사하고 인증 및 권한 부여를 수행한다.
- UsernamePasswordAuthenticationFilter
기본 로그인 처리 - BasicAuthenticationFilter
Basic 인증 처리 - OAuth2LoginAuthenticationFilter
OAuth2 로그인 처리 - CsrfFilter
CSRF 보호 - ExceptionTranslationFilter
인증/인가 예외 처리
AuthenticationManager (인증 관리자)
사용자 인증을 담당하는 핵심 컴포넌트이다.
여러 개의 AuthenticationProvider를 사용하여 인증을 수행한다.
authenticate(Authentication authentication) 메서드를 통해 인증을 검증한다.
AuthenticationProvider (인증 제공자)
실제 인증 로직을 수행하는 역할이다.
다양한 인증 방식 지원 (예: DaoAuthenticationProvider는 데이터베이스 기반 인증 담당)
UserDetailsService (사용자 정보 서비스)
사용자 정보를 로드하는 인터페이스이다.
DB 또는 외부 서비스에서 사용자 정보를 조회하여 UserDetails 객체로 반환한다.
InMemoryUserDetailsManager, JdbcUserDetailsManager 또는 직접 구현이 가능하다.
GrantedAuthority (권한 부여)
사용자의 권한을 관리하는 역할이다.
ROLE_ADMIN, ROLE_USER 같은 형태로 저장된다.
UserDetails 객체에 포함되어 있으며, 권한 검사 시 사용된다.
Spring Security의 처리 과정
1. 클라이언트 요청
- 사용자가 로그인 정보를 입력하고, /login 요청을 보낸다.
- AuthenticationFilter가 이 요청을 가로채고, 인증을 위한 UsernamePasswordAuthenticationToken 객체를 생성한다.
2. 인증(Authentication) 과정
- AuthenticationManager(보통 ProviderManager 구현체)가 UsernamePasswordAuthenticationToken을 받아 처리한다.
- AuthenticationManager는 적절한 AuthenticationProvider를 찾아 인증을 요청한다.
- AuthenticationProvider는 UserDetailsService를 이용하여 DB에서 사용자의 정보를 가져온다.
- UserDetailsService는 UserDetails 객체를 생성하여 사용자 정보를 반환한다.
- AuthenticationProvider는 UserDetails의 비밀번호와 사용자가 입력한 비밀번호를 비교하여 인증을 수행한다.
- 인증이 성공하면, 사용자 정보와 권한이 담긴 Authentication 객체를 반환한다.
- 다시 최초의 AuthenticationFilter에 Authentication 객체가 반환된다.
- SecurityContextHolder는 Authentication 객체를 반환한다.
3. 인증 결과 저장 및 처리
- AuthenticationFilter는 반환된 Authentication 객체를 받아 인증이 성공했음을 확인한다.
- SecurityContextHolder가 Authentication 객체를 SecurityContext에 저장하여 이후 요청에서 사용될 수 있도록 한다.
마무리
이번 과정을 통해 Spring Security의 구조와 주요 처리 과정을 단계별로 살펴보면서,
체계적인 필터 체인과 인증 매커니즘이 어떻게 작동하는지 깊이 이해할 수 있었다.
특히, AuthenticationManager와 UserDetailsService를 커스텀하여
인증 방식을 확장하는 과정에서 Spring Security의 유연성과 확장성을 실감할 수 있었다.
이러한 경험을 바탕으로, OAuth2 및 JWT 기반 인증을 적용할 때도
Spring Security의 원리를 효과적으로 활용할 수 있을 것이다.
참고 자료 :
TutorialsPoint - Spring Security - Architecture
Spring Security - Architecture
Spring Security - Architecture - Spring Security is one of Spring Project or Module to secure a Spring based application. Spring security provides us many in-built features to implement authentication and authorization in our application. We can use these
www.tutorialspoint.com
Spring Security Offical Docs - Authorization Architecture
Authorization Architecture :: Spring Security
It is a common requirement that a particular role in an application should automatically "include" other roles. For example, in an application which has the concept of an "admin" and a "user" role, you may want an admin to be able to do everything a normal
docs.spring.io
'🚀Architecture' 카테고리의 다른 글
레이어드 아키텍처(Layered Architecture) 알아보기 (2) | 2024.12.09 |
---|
블로그의 정보
코드의 여백
rowing0328