Spring Security에서 AuthenticationManager와 AuthenticationConfiguration는 인증(Authentication)과 관련된 핵심적인 컴포넌트이다. 각각의 역할과 사용 방법을 알아본다.
1. AuthenticationManager : Spring Security의 인증(Authentication)을 처리하는 핵심 인터페이스이다.
역할:
- 인증 요청을 처리하고, 성공 또는 실패 여부를 반환한다.
- 다양한 인증 메커니즘을 지원할 수 있다 (예: 사용자 이름/비밀번호, OAuth2 등).
- 인증 로직의 중심에 위치하며, 인증 필터(UsernamePasswordAuthenticationFilter)가 이를 호출한다.
주요 메소드: authenticate: 인증 요청을 처리하고 결과(Authentication)를 반환한다.
Authentication authenticate(Authentication authentication) throws AuthenticationException;
구현체: 기본적으로 Spring Security는 ProviderManager라는 구현체를 사용한다. 여러 AuthenticationProvider를 조합하여 인증을 처리한다.
사용 예:
- 사용자 인증: Spring Security가 로그인 요청을 처리할 때 AuthenticationManager를 호출하여 인증한다.
- 커스터마이징: 사용자 정의 인증 로직을 추가할 경우, AuthenticationManager를 구성하거나 확장해야 한다.
2. AuthenticationConfiguration : AuthenticationManager와 관련된 설정을 제공하는 도우미 클래스이다.
역할:
- Spring Security의 AuthenticationManager를 구성하고 관리한다.
- 다양한 보안 설정 정보를 기반으로 AuthenticationManager를 생성한다.
- Spring Boot와 Spring Security에서 제공하는 자동 구성의 일부로 동작한다.
주요 메소드: getAuthenticationManager(): AuthenticationManager 인스턴스를 반환한다.
사용 예:
- AuthenticationManager 생성: Spring Security 컨텍스트에서 AuthenticationManager를 Bean으로 등록할 때 사용된다.
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception {
return authConfig.getAuthenticationManager();
}
- 자동 구성 활용: Spring Security는 AuthenticationConfiguration을 자동으로 설정하며, 필요한 경우 이를 통해 AuthenticationManager를 얻어올 수 있다.
특징 | AuthenticationManager | AuthenticationConfiguration |
역할 | 인증 요청을 처리하고 결과를 반환하는 핵심 인터페이스 | AuthenticationManager를 생성, 구성 및 관리하는 설정 클래스 |
Spring Security 구성 | 주로 인증 로직의 중심에 위치, 여러 인증 제공자를 통합 | 인증 관련 설정을 캡슐화하여 자동 구성 지원 |
사용 위치 | 인증 요청 처리 및 필터 체인에서 호출됨 | 주로 @Bean 등록이나 커스터마이징 과정에서 사용 |
사용 목적 | 인증을 실행하고 결과를 반환 | 필요한 설정을 통해 AuthenticationManager를 구성 |
* 사용 흐름 *
a) Spring Boot 애플리케이션에서는 **자동 설정된 AuthenticationConfiguration**을 사용하여 AuthenticationManager를 구성한다.
b) 인증 요청이 들어오면, 필터 체인에서 AuthenticationManager를 호출하여 인증을 처리한다.
코드 예 :
1) AuthenticationManager를 직접 구성
@Bean
public AuthenticationManager customAuthenticationManager(AuthenticationConfiguration authConfig) throws Exception {
return authConfig.getAuthenticationManager();
}
2) 사용자 정의 인증 제공자 추가
@Bean
public AuthenticationManager authenticationManager(AuthenticationManagerBuilder builder) throws Exception {
builder
.inMemoryAuthentication()
.withUser("user")
.password("{noop}password")
.roles("USER");
return builder.build();
}
3) AuthenticationManager 주입
@Autowired
private AuthenticationManager authenticationManager;
public void authenticateUser(String username, String password) {
Authentication auth = new UsernamePasswordAuthenticationToken(username, password);
authenticationManager.authenticate(auth);
}
정리하자면
AuthenticationManager는 인증 로직의 중심 역할을 하며, 요청을 처리한다.
AuthenticationConfiguration은 Spring Security의 AuthenticationManager를 설정 및 관리하는 도우미 역할을 한다.