Spring-Security

기본인증 httpBasic() / BasicAuthenticationFilter

neal89 2025. 5. 21. 08:15

요약:

  1. HTTP Basic 인증: 웹 서버가 클라이언트에게 인증이 필요하다고 알리면(401 Unauthorized 응답), 클라이언트는 Base64로 인코딩된 사용자 이름과 비밀번호를 Authorization 헤더에 담아 다시 요청을 보냅니다. 이는 RFC 7235 표준에 기반하며, 보안을 위해 HTTPS/TLS와 함께 사용되어야 합니다.
  2. HttpBasic() API (Spring Security): Spring Security에서 HTTP Basic 인증을 설정하는 데 사용되는 API입니다. HttpBasicConfigurer를 통해 RealmName을 설정하거나 인증 실패 시 호출될 AuthenticationEntryPoint를 커스터마이징할 수 있습니다. 기본적으로 BasicAuthenticationEntryPoint가 사용됩니다.
  3. BasicAuthenticationFilter의 흐름:
    • 클라이언트가 /login과 같은 보호된 리소스에 접근을 시도합니다.
    • BasicAuthenticationFilter가 이 요청을 가로채어 Authorization 헤더에서 Base64로 인코딩된 사용자 이름과 비밀번호를 추출합니다.
    • 추출된 정보는 UsernamePasswordAuthenticationToken 객체로 변환됩니다.
    • 이 토큰은 AuthenticationManager에게 전달되어 인증을 시도합니다.
    • 인증 성공 시 (Y):
      • Authentication 객체가 생성되고 SecurityContextHolder에 저장됩니다. 이는 현재 요청의 SecurityContext에 인증 정보가 저장됨을 의미합니다.
      • 필요한 경우 RememberMeServices (Remember-me 기능이 활성화된 경우)가 loginSuccess를 호출합니다.
      • 애플리케이션 로직을 계속 실행하기 위해 chain.doFilter가 호출됩니다.
    • 인증 실패 시 (N):
      • SecurityContextHolder의 SecurityContext가 삭제됩니다.
      • RememberMeServices (Remember-me 기능이 활성화된 경우)가 loginFail을 호출합니다.
      • 클라이언트에게 WWW-Authenticate 헤더를 보내도록 AuthenticationEntryPoint (기본적으로 BasicAuthenticationEntryPoint)가 호출되어 재인증을 요구합니다.

이러한 과정을 통해 Spring Security는 HTTP Basic 인증을 처리하고, 성공 시 요청을 계속 진행하며, 실패 시 클라이언트에게 인증 실패를 알리고 재인증을 유도합니다