Spring Security #3

이용만·2023년 5월 12일
0
post-thumbnail

Spring Security의 인증 처리 흐름

순서 흐름

🟢 1) User가 로그인 폼 등을 통해 로그인 요청을 한다.

🟢 2) DelegatingFilterProxy로부터 위임을 받은 SecurityFilterChain 까지 들어오면 인증 처리가 시작된다.

🟢 3) UsernamePasswordAuthenticationFilter가 해당 요청을 전달 받는다.

  • UsernamePasswordAuthenticationFilter : 사용자의 로그인 요청을 처리하는 스프링 시큐리티
  • AbstractAuthenticationProcessingFilter : HTTP 기반의 인증 요청을 처리하지만 실질적인 인증 시도는 하위 클래스에게 맡기고, 인증에 성공하면 인증된 사용자의 정보를 SecurityContext에 저장하는 역할을 한다.

🟢 4) UsernamePasswordAuthenticationFilter는 ID, Password를 이용해 (2)과 같이 토큰을 생성한다.
UsernamePasswordAuthenticationToken은 Authentication 인터페이스를 구현한 구현 클래스이고
아직 인증이 되지 않은 Authentication이다.

🟢 5) UsernamePasswordAuthenticationFilter가 Authentication (인증안됨) 을 가지고 (3) Authentication Manager에게 전달한다.

  • Authentication Manager : 인증 처리를 총괄하는 매니저 역할의 인터페이스
  • ProviderManager : AuthenticationManager를 구현한 클래스

ProviderManager가 인증을 처리 할 누군가를 찾고 맡긴다.

🟢 6) ProviderManager가 Authentication (인증안됨) 을 AuthenticationProvider에게 인증하기 위해 전달한다.

🟢 7) AuthenticationProvider는 (5)처럼 UserDetailsService를 이용해 UserDetails를 조회한다.

  • UserDetails는 DB 등의 저장소에 저장된 사용자의 Username과 크리덴셜인 Password, 사용자의 권한 정보를 포함하고 있는 컴포넌트 이다.

  • UserDetailsService는 UserDetails를 제공하는 컴포넌트이다. (5)에서 처럼 DB 등의 저장소에서 사용자의 크리덴셜을 포함한 사용자의 정보를 조회하고 AuthenticationProvider에게 전달한다.

🟢 8) 사용자의 정보(username,password)를 가지고 UserDetails를 생성하고, 생성된 UserDetails를 다시 (8)번처럼 AuthenticationProvider에게 전달한다.

🟢 9) AuthenticationProvider는 PasswordEncoder를 이용해 UserDetails(인증됨) 에 포함된 Password와
인증을 위한 Authentication (인증안됨) 안의 Password가 일치하는지 검증한다

  • 검증 성공시 UserDetails(인증됨) 를 이용해 (9)처럼 인증된 Authentication 을 생성한다.

  • 실패 시 예외 발생

🟢 10) AuthenticationProvider는 인증된 Authentication 을 (10)번 처럼 ProviderManager에게 전달한다.

  • 인증된 Authentication 안에는 사용자의 정보인 Principal, Credential, GrantedAuthorities)를 가지고 있다.

🟢 11) (11)번처럼 인증된 Authentication 을 UsernamePasswordAuthenticationFilter에게 전달한다.

🟢 12) 인증된 Authentication 을 받은 UsernamePasswordAuthenticationFilter는 (12)번처럼
SecurityContextHolder를 이용해 SecurityContext에 인증된 Authentication 을 저장한다.

  • SecurityContext는 HttpSession에 저장되어 사용자의 인증 상태를 유지하고, 인증된 Authentication 객체를 저장하는 컴포넌트이다.
  • SecurityContextHolder는 SecurityContext를 관리하는 역할을 한다.
profile
성장하는 개발자가 되고자 합니다.

0개의 댓글