Programming/CS

[Security] UsernamePasswordAuthenticationFilter 인증 과정

디아쿠 2025. 1. 2. 12:44

 

해당 이미지를 어디선가 많이 보셨을텐데요... 네 맞습니다. 인증 수행 과정입니다.

SecurityFilterChain에서 사용하는 필터 중 UsernamePasswordAuthenticationFilter를 통해 인증 처리를 합니다.

 

위 그림의 인증 수행 과정을 설명하면 다음과 같습니다.

 

1. HTTP 요청 처리

  • 특정 URL에 대해 HTTP POST 요청을 가로챕니다.
  • 기본적으로 이 URL은 /login이며, 변경하려면 setFilterProcessesUrl() 메서드를 사용하면 됩니다.

2. 사용자 인증 정보 추출

  • 필터는 요청으로부터 username과 password 값을 추출합니다.
    • 기본적으로 폼 필드는 username과 password로 기대합니다. 커스터마이징하려면  setUsernameParameter() 및 setPasswordParameter() 메서드를 사용하면 됩니다.
{
  "username": "user@example.com",
  "password": "securePassword"
}

 

3. UsernamePasswordAuthenticationToken 생성

  • 추출한 인증 정보를 사용해 UsernamePasswordAuthenticationToken 객체를 생성합니다.
  • 이 객체는 Authentication 인터페이스의 구현체이며, 사용자의 이름, 비밀번호 , 권한 정보를 포함하게 됩니다.

4. AuthenticationManager에 인증 위임

  • UsernamePasswordAuthenticationFilter는 생성한 UsernamePasswordAuthenticationToken을 AuthenticationManager로 전달합니다.

5. UserDetailsService를 통한 사용자 조회

  • 일반적으로, DaoAuthenticationProvider가 사용되며, 이는 내부적으로 UserDetailsService를 호출합니다.
  • UserDetailsService는 데이터베이스 또는 다른 저장소에서 사용자의 정보를 조회합니다.

6. 비밀번호 검증 

  • UserDetailsService가 반환한 비밀번호와 사용자가 입력한 비밀번호를 비교합니다.
  • Spring Security는 내부적으로 PasswordEncoder를 사용하여 암호를 비교합니다.
  • 비밀번호가 일치하지 않으면 예외(BadCredentialsException)가 발생합니다.

7. 성공적인 인증 처리

  • 인증이 성공하면 Authentication 객체가 생성되고, 이 객체는 현재 사용자의 이름, 권한, 기타 정보를 포함합니다.
  • 성공한 Authentication 객체는 SecurityContextHolder에 저장됩니다.

8. 결과 처리

  • UsernamePasswordAuthenticationFilter는 successHandler를 호출합니다.
  • 기본적으로 SavedRequestAwareAuthenticationSuccessHandler가 사용되어 사용자를 인증 후 원래 요청 페이지로 리다이렉트합니다.

 


이 글에서는 UsernamePasswordAuthenticationFilter가 어떻게 동작하는지에 대해 자세하게 살펴 보았습니다.

인증 과정이 조금 복잡할 수는 있지만, 내부 동작을 이해하면 보안 설정을 보다 효율적으로 커스터마이징할 수 있습니다.

나중에는 OAuth2 인증 프로세스에 대해서 알아보는 시간을 가지겠습니다. 감사합니다!

 

728x90