- 폼 인증 필터에서 처리하는 과정과 흡사하고 간단
- 기본 인증 서비스를 제공하는데 사용
- BasicAuthenticationConverter를 사용하여 요청 헤더에 기술된 인증 정보의 유효성을 체크하며, Base64 인코딩된 username과 password를 추출
- 유효성 체크
- 클라이언트가 보낸 Request 헤더에 Authorization이 없으면 인증 처리 X
- Authorization 헤더명은 있으나 Basic이 없으면 인증 처리 X
- 유효성 체크
- 인증 이후 세션을 사용하는 경우와 사용하지 않는 경우에 따라 처리되는 흐름에 차이가 있음
- 기본적으로 BasicAuthenticationFilter는 세션을 사용하지 않음
- 세션을 사용하는 경우 매 요청마다 인증 과정을 거치지 않으나, 세션을 사용하지 않는 경우 매 요청마다 인증 과정을 거침
흐름도
- 클라이언트가 Get 방식으로 “/loign” URL 요청
- BasicAuthenticationFilter에서 유효성 검증(Authorization 헤더명, Basic 포함 확인)
- 유효성 검증 성공 → UsernamePasswordAuthenticationToken에 username + password 저장
- AuthenticationManager에 토큰 전달 → 인증 성공 or 실패
인증 성공
- UsernamePasswordAuthenticationToken에 재 생성
- 유저 정보(UserDetails or User)와 권한 정보(Authorities) 정보를 담아서 저장
- SpringContextHolder
- Authentication을 SecurityContext에 설정
- 요청 컨텍스트에 SecurityContext 저장(폼 인증 필터에서는 세션에 저장)
- 요청 범위 내에서만 인증 상태가 유지
- 요청 컨텍스트 때문에 요청이 끝나고 응답이 가게 되면 인증 상태가 유지 되지 않음
- 기본적으로 HTTP Basic 인증은 요청 헤더에다가 계속적으로 이 값을 보내줘야만 인증을 받는 식
- RememberMeService
- chain.doFilter ⇒ 애플리케이션 로직을 계속 실행
인증 실패
- SecurityContextHolder ⇒ 삭제
- RememberMeServices ⇒ 기억하기가 있다면 삭제
- AuthenticationEntryPoint ⇒ WWW-Authenticate를 보내도록 호출
- 다시 인증을 받아야하기 때문에 폼 인증처럼 페이지를 제공하는 것이 아니라, WWW-Authenticate를 보냄
'Language > Spring Security' 카테고리의 다른 글
기억하기 인증 필터 - RememberMeAuthenticationFilter (0) | 2024.07.16 |
---|---|
기억하기 인증 - rememberMe() (0) | 2024.07.16 |
기본 인증 - httpBasic() (0) | 2024.07.16 |
폼 인증 필터 - UsernamePasswordAuthenticationFilter (0) | 2024.07.15 |
폼 인증 - formLogin() (0) | 2024.07.15 |