스프링 시큐리티는 주로 서블릿 필터와 이들로 구성된 필터체인을 사용하고 있습니다.
실제 로그인 시에 스프링 시큐리티의 동작 플로우를 바탕으로
인증과 관련된 스프링 시큐리티의 아키텍쳐를 알아 보도록 하겠습니다.
사용자가 로그인 정보와 함께 인증 요청(Http Request)
AuthenticationFilter가 이 요청을 가로챕니다.
이 때 가로챈 정보를 통해 UsernamePasswordAuthenticationToken이라는 인증용 객체를 생성합니다.
AuthenticationManager의 구현체인 ProviderManager에게
UsernamePasswordAuthenticationToken 객체를 전달합니다.
다시 AuthenticationProvider에 UsernamePasswordAuthenticationToken 객체를 전달합니다.
실제 데이터베이스에서 사용자 인증정보를 가져오는 UserDetailsService에 사용자 정보(아이디)를 넘겨줍니다.
넘겨받은 사용자 정보를 통해 DB에서 찾은 사용자 정보인 UserDetails 객체를 만듭니다.
이 때 UserDetails 는 인증용 객체와 도메인용 객체를 분리하지 않고 인증용 객체에 상속해서 사용하기도 합니다.
AuthenticationProvider는 UserDetails를 넘겨받고 사용자 정보를 비교합니다.
인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체를 반환합니다.
다시 최초의 AuthenticationFilter에 Authentication 객체가 반환됩니다.
Authentication 객체를 SecurityContext에 저장합니다.
다음글 [JWT🔒] Spring Security Filter
'개발중 > JSON Web Tokens (JWT)' 카테고리의 다른 글
[JWT🔒] JWT(Json Web Token) (0) | 2022.03.27 |
---|---|
[JWT🔒] Spring Security Filter (0) | 2022.03.27 |
[JWT🔒] 인증(Authentication)과 권한(Authorization) (0) | 2022.03.27 |