✅ Authentication Filter, Authentication Manager, Authentication Provider는 Spring Security의 핵심 컴포넌트로서 인증(Authentication) 과정을 처리하는 역할을 합니다. 각각의 개념과 역할을 자세히 설명해 드리겠습니다.
1. Authentication Filter (인증 필터)
정의
- Authentication Filter는 사용자의 요청에서 인증 정보를 추출하고 인증을 시도하는 Filter입니다.
- 주로 HTTP 요청의 Authorization 헤더, 폼 데이터, 쿠키 등에서 인증 정보를 가져옵니다.
역할
- 클라이언트 요청에서 인증 정보(예: 사용자명/비밀번호, 토큰)를 추출합니다.
- AuthenticationManager에 인증 처리를 위임합니다.
- 인증 결과에 따라 다음 단계로 요청을 전달하거나 인증 실패를 처리합니다.
주요 필터 예시
Spring Security가 제공하는 기본 Authentication Filter는 다음과 같습니다:
UsernamePasswordAuthenticationFilter
- 폼 기반 로그인 처리 필터입니다.
POST /login
요청에서 사용자명(username)과 비밀번호(password)를 추출합니다.
BearerTokenAuthenticationFilter
- JWT 또는 Bearer Token 인증 처리 시 사용됩니다.
Authorization
헤더에서 Bearer 토큰을 추출합니다.
BasicAuthenticationFilter
- HTTP Basic 인증 처리를 담당합니다.
Authentication Filter 작동 예시
public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) {
// 요청에서 사용자명과 비밀번호 추출
String username = request.getParameter("username");
String password = request.getParameter("password");
UsernamePasswordAuthenticationToken authRequest =
new UsernamePasswordAuthenticationToken(username, password);
// AuthenticationManager에 인증 요청 위임
return this.getAuthenticationManager().authenticate(authRequest);
}
}
2. Authentication Manager (인증 관리자)
정의
- AuthenticationManager는 인증 요청을 받아 여러 AuthenticationProvider에게 인증을 시도하도록 위임하는 중앙 관리자입니다.
- ProviderManager는
AuthenticationManager
의 대표 구현체입니다.
역할
authenticate()
메서드를 통해 인증 요청을 받습니다.- 요청을 각 AuthenticationProvider에게 전달하여 인증을 시도합니다.
- 인증 성공 시 Authentication 객체를 반환합니다.
- 인증 실패 시 AuthenticationException을 던집니다.
작동 구조
- AuthenticationManager →
- 여러 AuthenticationProvider 중에서 적합한 Provider에게 위임 →
- Provider가 인증 성공 시 Authentication 객체 반환
AuthenticationManager 설정 예시
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception {
return http.getSharedObject(AuthenticationManagerBuilder.class)
.authenticationProvider(customAuthenticationProvider())
.build();
}
3. Authentication Provider (인증 제공자)
정의
- AuthenticationProvider는 실제 인증 로직을 담당하는 컴포넌트입니다.
- 특정 타입의 Authentication 객체를 처리할 수 있습니다.
역할
supports()
메서드를 통해 자신이 처리할 수 있는 Authentication 타입인지 확인합니다.authenticate()
메서드를 통해 인증 로직을 실행합니다.- 인증 성공 시 Authentication 객체를 반환합니다.
- 인증 실패 시 AuthenticationException을 던집니다.
Custom AuthenticationProvider 예시
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getName();
String password = authentication.getCredentials().toString();
// 사용자 인증 로직 (예: DB 조회, 비밀번호 검증)
if ("user".equals(username) && "password".equals(password)) {
return new UsernamePasswordAuthenticationToken(username, password, List.of(new SimpleGrantedAuthority("ROLE_USER")));
} else {
throw new BadCredentialsException("인증 실패: 사용자명 또는 비밀번호 불일치");
}
}
@Override
public boolean supports(Class<?> authentication) {
// 이 Provider가 UsernamePasswordAuthenticationToken만 처리하도록 지정
return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication);
}
}
4. 전체 흐름 정리
Authentication Filter:
- HTTP 요청에서 인증 정보를 추출하고 AuthenticationManager에 전달합니다.
AuthenticationManager:
- 인증 요청을 여러 AuthenticationProvider 중 적합한 Provider에 위임합니다.
AuthenticationProvider:
- 실제 인증 로직을 수행하고 Authentication 객체를 반환하거나 예외를 던집니다.
SecurityContext:
- 인증 성공 시 반환된 Authentication 객체를 SecurityContext에 저장하여 인증 상태를 유지합니다.
정리
- Authentication Filter: 요청에서 인증 정보를 추출하고 인증을 시도하는 필터입니다.
- Authentication Manager: 여러 AuthenticationProvider를 관리하며 인증 처리를 위임하는 관리자입니다.
- Authentication Provider: 실제 인증 로직을 수행하며, 특정 타입의 Authentication을 처리합니다.
'Spring Security' 카테고리의 다른 글
Authentication Resolver (0) | 2024.12.18 |
---|---|
SecurityContext (0) | 2024.12.18 |
RFC6265 (0) | 2024.10.31 |
SameSite (0) | 2024.10.31 |
CORS(Cross-Origin Resource Sharing)의 Simple Request와 Non-Simple Request (0) | 2024.10.31 |