이번에는 스프링 시큐리티에서 기본 HTTP 인증 로직이 어떻게 돌아가는지 알아보자.
Basic HTTP Authentication
클라이언트로 요청이 들어오면 SecurityFilterChain에서 다음과 같은 동작이 일어난다.
1. 클라이언트가 인증되지 않은 요청을 한다.
2. 스프링 시큐리티의 FilterSecurityInterceptor는 AccessDeniedException 예외를 던지면서 요청을 거절한다.
3. 유저가 인증되지 않았기 때문에 ExceptionTranslationFilter는 인증에 필요한 과정을 실행한다.
- AuthenticationEntryPoint의 구현체인 Basic AuthenticationEntryPoint는 WWW-Authenticate header를 보낸다.
- 기본적으로 클라이언트가 같은 요청을 다시 할 수 있기 때문에 RequestCache는 NullRequestCache이다.
클라이언트가 WWW-Authenticate header를 받으면, username과 password와 함께 다시 재 요청을 한다. 아래에서 이러한 정보를 가지고 어떤 인증 로직이 이루어 지는지 확인해보자.
아래도 마찬가지로 SecurityFilterChain에서 일어나는 로직이다.
1. 유저가 username과 password를 서버로 보내면, BasicAuthenticationFilter가 HttpServlet으로부터 필요한 정보를 추출해서 UsernamePassowrdAuthenticationToken을 생성한다.
2. UsernamePasswordAuthenticationToken이 AuthenticationManager로 전달되고, 유저의 정보를 확인해서 인증 과정을 거친다.
3. 인증에 실패하면 3번의 과정을 거친다.
4. 인증에 성공하면 4번의 과정을 거친다.