반응형
1. 인증 관련 주요 클래스와 인터페이스 및 동작원리
- Authentication: 인증 요청과 인증된 주체를 나타내는 인터페이스이다.
- AuthenticationManager: 실제로 인증을 처리하는 인터페이스이다.
- UserDetailsService: 사용자의 세부 정보를 로드하는 방법을 정의한다.
- PasswordEncoder: 비밀번호의 암호화 또는 해싱을 처리한다.
- Spring Security 6의 주요 인증 방식(Basic Authentication, Form-Based Authentication, OAuth2, JWT)은 모두 AuthenticationManager를 사용한다.
- AuthenticationManager는 UserDetailsService를 호출하여 사용자 정보를 로드하고, Authentication 객체를 생성한다.
- UserDetailsService는 PasswordEncoder를 사용하여 비밀번호를 검증한다.
2. Spring Security 6에서의 인증 (Authentication) 방법
Spring Security 6에서는 SecurityFilterChain을 @Bean으로 등록하여 사용하는 새로운 방식이 주목을 받고 있다. 이를 기반으로 주요 인증 방식들을 살펴보자
2-1. 기본 인증 (Basic Authentication)
@Bean
public SecurityFilterChain basicSecurityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(authz -> authz
.anyRequest().authenticated()
).httpBasic(Customizer.withDefaults())
.build();
}
2-2. 폼 인증 (Form-Based Authentication)
@Bean
public SecurityFilterChain formSecurityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.anyRequest().authenticated()
).formLogin(Customizer.withDefaults());
return http.build();
}
2-3. OAuth2 인증
@Bean
public SecurityFilterChain oauth2SecurityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.anyRequest().authenticated()
)
.oauth2Login(Customizer.withDefaults());
return http.build();
}
2-4. JWT (Json Web Token) 인증
@Bean
public SecurityFilterChain jwtSecurityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.anyRequest().authenticated()
)
.addFilterBefore(new JwtFilter(), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
2-5. 인증 흐름
- 사용자가 로그인을 시도한다.
- AuthenticationManager가 UserDetailsService를 사용하여 사용자 정보를 로드한다.
- 로드된 사용자 정보와 입력값을 비교하여 인증 여부를 결정한다.
2023.10.21 - [SpringBoot 개발/Spring Security] - Spring Security와 CORS: 크로스 도메인 리소스 공유 이해하기
반응형
'Spring Security' 카테고리의 다른 글
[Spring] 스프링 시큐리티 설정이 @Bean 기반 구성으로 바뀐 이유 (0) | 2024.08.23 |
---|---|
Spring Security와 CORS: 크로스 도메인 요청 처리 기법 알아보기 (0) | 2023.10.21 |
Spring Boot 3.1 & Spring Security 6: Security Config 최적화 리팩토링 (12편) (0) | 2023.09.04 |
Spring Boot 3.1 & Spring Security 6: JWT 검증 리팩토링 (11편) (2) | 2023.09.04 |
Spring Security 6 이해하기: 동작 원리와 보안 기능 탐구 (0) | 2023.09.04 |