[Section4] Spring Security - 인증 구성요소 이해

2023. 7. 11. 14:11

🧑🏻‍💻 TIL(Today I Learned)


✔️  Spring Security의 인증 처리 흐름, 인증 컴포넌트 

 

 

💡 Spring Security의 인증 처리 흐름

➡️ Spring Security에서는 Spring Security Filter Chain을 통해 보안을 위한 특정 작업을 처리함 

➡️ 사용자의 인증 요청이 Spring Security Filter Chain의 특정 Filter에 도달했을 때  Spring Security의 컴포넌트들이 어떤 과정을 거쳐 사용자의 인증 요청을 처리하는지 흐름 이해하기 

 

  1. 사용자가 로그인 폼 등을 이용해 로그인 ID와 Password를 포함한 Request를 Spring Security가 적용된 애플리케이션에 전송
    → 사용자의 로그인 요청이 Spring Security의 Filter Chain 까지 들어오면 여러 Filter들 중에서 
         UsernamePasswordAuthenticationFilter 가 해당 요청 전달받음

  2. 사용자의 요청을 전달받은 UsernamePasswordAuthenticationFilter 가 ID와 Password를 이용해 
        UsernamePasswordAuthenticationToken 생성
    ※ UsernamePasswordAuthenticationToken 은 Authentication 인터페이스를 구현한 구현 클래스이며 Authentication은 아직 인증이 되지 않은 Authentication임!


  3. 인증되지 않은 Authentication을 가지고 있는 UsernamePasswordAuthenticationFilter는 해당 Authentication을 AuthenticationManager에게 전달
    AuthenticationManager는 인증 처리를 총괄하는 매니저 역할을 하는 인터페이스 
    → AuthenticationManager를 구현한 구현 클래스가 ProviderManager(실직적인 매니저)

  4. 인증을 대신 처리해줄  AuthenticationProvider에게  Authentication을 전달하고 이  AuthenticationProvider는
    User DetiailService를 이용해 UserDetails 조회
    → UserDetails는 데이터베이스 등의 저장소에 저장된 사용자의 Username과 사용자의 자격을 증명해 주는 크리덴셜(Credential)인 Password 그리고 사용자의 정보 권한 정보를 포함하고 있는 컴포넌트 

  5. UserDetailsService는 데이터베이스 저장소에서 사용자의 크리덴셜(Credential) 포함한 사용자의 정보 조회함
  6. 위에서 조회한 사용자 정보를 기반으로 UserDetails 생성한 후, 생성된 UserDetails를  AuthenticationProvider에 전달
  7.  AuthenticationProvider는 PasswordEncoder 이용하여 암호화된 Password와 인증을 위한 Authentication 안에 포함된 Password가 일치하는지 검증
  8. 검증에 성공하면 UserDetails를 이용해 인증된 Authentication 생성하고 성공하지 못하면 Exception 발생시키고 인증 처리 중단

  9.  AuthenticationProvider는 인증된 Authentication을 ProviderManager에게 전달함 
    처음에는 인증을 위해 필요한 사용자의 로그인 정보를 가지고 있었다면 지금은 인증에 성공한 사용자의 정보(Principal, credential, GrantedAuthorities)를 가지고 있음!

  10. ProviderManager는 인증된 Authentication을 다시 UsernamePasswordAuthenticationFilter에게 전달 
  11. UsernamePasswordAuthenticationFilter는 마지막으로 SecurityContextHolder를 이용해 SecurityContext에 인증된 Authentication 저장 
    ※ SecurityContext는 이후에 Spring Security의 세션 정책에 따라서 HttpSession에 저장되어 사용자의 인증 상태를 유지하기도 하고 HttpSession을 생성하지 않고 무상태를 유지하기도 함 

 

 

BELATED ARTICLES

more