스프링 시큐리티 OAuth2/Spring Security Fundamentals

HttpBasic 인증

webmaster 2022. 12. 18. 18:02
728x90

HttpBasic 인증

Http는 엑세스 제어와 인증을 위한 프레임워크를 제공하며, 가장 일반적인 인증 방식은 "Basic" 인증방식이다.

RFC7235 표준이며, 인증 프로토콜은 Http 인증 헤더에 기술되어 있다.

Http basic 인증

  1. 클라이언트는 인증정보 없이 서버로 접속을 시도한다
  2. 서버가 클라이언트에게 인증요구를 보낼 때 401 Unauthorized 응답과 함께 WWW-Authenticate 헤더를 기술해서 realm(보안영역) 과 Basic 인증방법을 보냄
  3. 클라이언트가 서버로 접속할 때 Base64 로 username 과 password 를 인코딩하고 Authorization 헤더에 담아서 요청함
  4. 성공적으로 완료되면 정상적인 상태 코드를 반환한다.

HttpBasicConfigurer

  • HttpBasic 인증에 대한 초기화를 진행하며, 속성들에 대한 기본값들을 설정한다.
  • 기본 AuthenticationEntryPoint는 BasicAuthenticationEntryPoint이다.
  • 필터는 BasicAuthenticationFilter를 사용한다.

BasicAuthenticationFilter

  • 기본 인증 서비스를 제공하는데 사용된다.
  • BasicAuthenticationConverter 사용해서 요청 헤더에 기술된 인증정보의 유효성을 체크하며 Base64 인코딩된 username password 추출한다
  • 인증이 성공하면 Authenticatoin SecurityContext 에 저장되고 인증이 실패하면 Basic 인증을 통해 다시 인증하라는 메시지를 표시하는 BasicAuthenticationEntryPoint 가 호출된다
  •  
    인증 이후 세션을 사용하는 경우와 사용하지 않는 경우에 따라 처리되는 흐름에 차이가 있다. 세션을 사용하는 경우 매 요청 마다 인증과정을 거치지 않으나 세션을 사용하지 않는 경우 매 요청마다 인증과정을 거쳐야 한다

흐름도

동작 과정

  1. 요청이 들어오면 BasicAuthenticationFilter로 전달된다.
  2. BasicAuthenticationFilter는 BasicAuthenticationCovert를 통해 Authorization Basic xxxx 를 파싱해서, username과 password를 추출하게 된다.
  3. username, password를 가지고, UsernamePasswordAuthenticationToken 객체를 만들어 인증처리를 진행하게 된다.
  4. authenticationIsRequired를 통해 인증이 필요한지를 체크하게 되는데, 이전에 인증을 받았다면, chain.doFilter를 인증을 받지 않았다면, ProviderManager를 통해 인증을 진행하게 된다.
  5. ProviderManager를 구현한 DaoAuthenticationProvider를 통해 인증한다.
    • 인증이 성공하면, 인증에 성공한 객체를 다시 UsernameAuthenticationToken을 만들어 SecurityContext에 저장하게 된다.
    • 인증에 실패하면, BasicAuthenticationEntryPoint로 가서, 재인증을 받도록 Login prompt를 띄우던지, 인증 취소되는 401 Unauthorized 예외를 발생시킨다.

 

728x90