728x90
HttpBasic 인증
Http는 엑세스 제어와 인증을 위한 프레임워크를 제공하며, 가장 일반적인 인증 방식은 "Basic" 인증방식이다.
RFC7235 표준이며, 인증 프로토콜은 Http 인증 헤더에 기술되어 있다.

- 클라이언트는 인증정보 없이 서버로 접속을 시도한다
- 서버가 클라이언트에게 인증요구를 보낼 때 401 Unauthorized 응답과 함께 WWW-Authenticate 헤더를 기술해서 realm(보안영역) 과 Basic 인증방법을 보냄
- 클라이언트가 서버로 접속할 때 Base64 로 username 과 password 를 인코딩하고 Authorization 헤더에 담아서 요청함
- 성공적으로 완료되면 정상적인 상태 코드를 반환한다.
HttpBasicConfigurer
- HttpBasic 인증에 대한 초기화를 진행하며, 속성들에 대한 기본값들을 설정한다.
- 기본 AuthenticationEntryPoint는 BasicAuthenticationEntryPoint이다.
- 필터는 BasicAuthenticationFilter를 사용한다.
BasicAuthenticationFilter
- 기본 인증 서비스를 제공하는데 사용된다.
-
BasicAuthenticationConverter 를 사용해서 요청 헤더에 기술된 인증정보의 유효성을 체크하며 Base64 인코딩된 username 과 password 를 추출한다
-
인증이 성공하면 Authenticatoin 이 SecurityContext 에 저장되고 인증이 실패하면 Basic 인증을 통해 다시 인증하라는 메시지를 표시하는 BasicAuthenticationEntryPoint 가 호출된다
-
인증 이후 세션을 사용하는 경우와 사용하지 않는 경우에 따라 처리되는 흐름에 차이가 있다. 세션을 사용하는 경우 매 요청 마다 인증과정을 거치지 않으나 세션을 사용하지 않는 경우 매 요청마다 인증과정을 거쳐야 한다
흐름도

- 요청이 들어오면 BasicAuthenticationFilter로 전달된다.
- BasicAuthenticationFilter는 BasicAuthenticationCovert를 통해 Authorization Basic xxxx 를 파싱해서, username과 password를 추출하게 된다.
- username, password를 가지고, UsernamePasswordAuthenticationToken 객체를 만들어 인증처리를 진행하게 된다.
- authenticationIsRequired를 통해 인증이 필요한지를 체크하게 되는데, 이전에 인증을 받았다면, chain.doFilter를 인증을 받지 않았다면, ProviderManager를 통해 인증을 진행하게 된다.
- ProviderManager를 구현한 DaoAuthenticationProvider를 통해 인증한다.
- 인증이 성공하면, 인증에 성공한 객체를 다시 UsernameAuthenticationToken을 만들어 SecurityContext에 저장하게 된다.
- 인증에 실패하면, BasicAuthenticationEntryPoint로 가서, 재인증을 받도록 Login prompt를 띄우던지, 인증 취소되는 401 Unauthorized 예외를 발생시킨다.
728x90
'스프링 시큐리티 OAuth2 > Spring Security Fundamentals' 카테고리의 다른 글
| CORS (0) | 2022.12.20 |
|---|---|
| 시큐리티 인증 및 인가 흐름 요약 (0) | 2022.12.17 |
| AuthenticationEntryPoint 이해 (0) | 2022.12.17 |
| 자동 설정에 의한 초기화 진행 (0) | 2022.12.11 |
| 초기화 과정 이해(SecurityBuilder / SecurityConfigurer) (0) | 2022.12.02 |