View
Spring Security - Authentication Architecture: Example
rura6502 2021. 12. 21. 23:17 이전 글에서 스프링 시큐리티가 인증
을 위해 어떤 설계로 구성, 동작하는지 전반적인 아키텍처를 살펴보았다. 객체간의 호출 관계를 텍스트로만 보면 약간 이해가 어려울 수 있는데 공식 도큐먼트에서 설명하고있는 예제를 통해 더 쉽게 이해할 수 있다.
Form Login
폼 로그인의 아이디, 비밀번호를 폼에 입력해서 인증받을 수 있는 가장 일반적인 경우이다.
임의의 url로 접근했을 때 로그인 페이지로 리다이렉션되기까지...
1. 클라이언트의 /private
요청
클라이언트가 /private
라는 api를 요청했다. 여기서 중요한점은 클라이언트는 인증
과정에서 익명
으로 판단된 것이다.
2. 접근 거부, AccessDeniedException
익명 클라이언트의 /private
요청은 SecurityFilterChain
에서 익명 클라이언트에게 제공할 수 없다는 판단을 하게되고 이는 AccessDeniedException
을 발생시킨다.
3. /login
페이지로 리다이렉션
AccessDeniedException
은 Spring Security - Architecture 에서 마지막에 언급했던, 스프링 시큐리티에서 두가지 메인 익셉션인 AuthenticationException
, AccessDeniedException
를 처리하는 필터인 ExceptionTranslationFilter
로 전달되고, ExceptionTranslationFilter
는 AuthenticationEntriyPoint
에 설정된 페이지로 리다이렉션시키는 응답을 클라이언트에 전송된다. 기본 설정의 경우 LoginUrlAuthenticationEntryPoint
가 인스턴스로 사용된다.
로그인 요청
1. 유저 정보를 인증하기 위한 필터
클라이언트가 폼을 통해 username, password를 입력했다면 해당 요청은 스프링 시큐리티가 제공하는 기본 필터들 중 UsernamePasswordAuthenticationFilter
가 인증을 담당하게 된다. UsernamePasswordAuthenticationFilter
는 받은 HttpServletRequest
정보(username, password)를 조합해서 Authentication
의 구현체인 UsernamePasswordAuthenticationToken
을 생성한다.
2. AuthenticatinManager
생성된 UsernamePasswordAuthenticationToken
는 실제 인증 과정을 거치기 위해 AuthenticationManager
로 전달된다.
3. 정보 인증에 실패했을 때
인증 정보가 실패하면 앞서 저장했던 SecurityContextHolder
의 내용이 비워지게 되고 AuthenticationFailureHandler
에 의해 다음 액션이 정의된다.
4. 정보 인증에 성공했을 때
인증 정보가 SecurityContextHolder
에 저장되고 다양한 모듈들이 호출되는데, 세션 관련 작업을 위한 SessionAuthenticationStrategy
, 로그인 성공 이벤트를 위한 AuthenticationSucessHandler
가 호출되고 되고 AppliationEventPublisher
에서 InteractiveAuthenticationSuccessEvent
발생시킨다.
Reference
'Framework & Library & Tool > Spring&SpringBoot' 카테고리의 다른 글
[김영한]ORM JPA Basic 정리(미완료) (0) | 2022.01.20 |
---|---|
Spring Framework Web MVC - Architecture (0) | 2021.12.23 |
Spring Security - Authentication Architecture (0) | 2021.12.21 |
Spring Security - Architecture (0) | 2021.12.21 |
Servlet, Servlet Container, Spring Container (0) | 2021.12.10 |