이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
인증 API - 사용자 정의 보안 기능 구현
복습
- 스프링 시큐리티의 의존성 추가 시 일어나는 일들
- 서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다.
- 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동한다.
- 모든 요청은 인증이 되어야 자원에 접근이 가능하다.
- 인증 방식은 폼 로그인 방식과 httpBasic 로그인 방식을 제공한다.
- 기본 로그인 페이지를 제공한다.
- 기본 계정 한 개를 제공한다.
- username: user / password: 랜덤 문자열
- 문제점
- 계정 추가, 권한 추가, DB 연동 등
- 기본적인 보안 기능 외에 시스템에서 필요로 하는 더 세부적이고 추가적인 보안기능이 필요하다.
사용자 정의 보안 기능 구현
- WebSecurityConfigureAdapter 클래스는 스프링 시큐리티의 웹 보안 기능 초기화 및 설정 및 HttpSecurity 클래스를 생성한다.
- WebSecurityConfigureAdapter 클래스와 HttpSecurity 클래스는 의존성을 추가했을 경우 시스템에 기본적인 웹 보안 기능을 활성화하고 제공해준다.
WebSecurityConfigureAdapter
SecurityConfig 설정
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
주의! - 변경됨
HttpSecurity 구성
- Spring 2.7.7 버전에서 실제 위와 같이 SecurityConfig를 작성하면 다음과 같다.
- WebSecurityConfigureAdapter 클래스가 Deprecated 되었다.
- 원인
- 공식 문서를 살펴보면 스프링 시큐리티 5.7 버전 이상부터는 더이상 WebSecurityConfigureAdapter 사용이 권장되지 않는다.
- 해결방법
- SecurityFilterChain을 Bean으로 등록해 해결한다.
- 원인
SecurityFilterChain Bean 등록
- 공식 문서에서 다음과 같이 SecurityFilterChain을 Bean으로 등록한다.
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
return http.build();
}
}
- 인가 정책
- authorizeHttpRequests() 메소드를 호출하면 요청에 대한 보안 검사가 시작된다.
- 어떤 요청에도 (anyRequest()) 인증을 받도록 (authenticated()) 설정했다.
- authorizeHttpRequests() 메소드를 호출하면 요청에 대한 보안 검사가 시작된다.
formLogin() 메소드 추가
- 인증 정책
- formLogin() 방식을 통해 인증을 받도록 설정한다.
Password 등록
- 현재 서버를 실행하면 랜덤하게 제공되는 Password를 사용한다.
- 이것은 매우 번거롭다.
- 환경설정 파일에 Password를 직접 지정하여 작성한 Password로 인증할 수 있도록 한다.
- 설정한 Password로 로그인하면 다음과 같이 정상적으로 수행된다.
'스프링 시큐리티 > 스프링 시큐리티 기본 API 및 Filter 이해' 카테고리의 다른 글
Logout 처리, LogoutFilter (1) | 2023.01.10 |
---|---|
FormLogin 인증 필터: UsernamePasswordAuthenticationFilter (0) | 2023.01.09 |
인증 API - Form 인증 (1) | 2023.01.09 |
HTTP Basic 인증, BasicAuthenticationFilter (0) | 2023.01.09 |
프로젝트 구성 및 의존성 추가 (1) | 2023.01.09 |