Spring Security의 인증 처리 흐름

2023. 3. 16. 22:28Spring

◎ Spring Security의 인증 처리 흐름

-> Spring Security에서는 Spring Security Filter Chain을 통해 보안을 위한 작업을 처리한다.

-> 아래의 그림은 Spring Security Filter Chain에 사용자의 인증 요청이 전달되었을 때 그 처리 흐름이다.

 

컴포넌트로 보는 Spring Security의 인증 처리 흐름

1. 사용자가 Username과 Password를 포함한 요청을 Spring Security가 적용된 애플리케이션에 전송한다.

- 사용자의 로긍니 요청이 스프링 시큐리티의 필터 체인까지 들어오면 필터들 중 UsernamePasswordAuthenticationFilter가 이 요청을 전달 받는다.

 

2. 요청을 전달 받은 UsernamePasswordAuthenticationFilter는 Username과 Password를 이용해 UsernamePsswordAuthenticationToken을 생성한다. 생성된 이 클래스는 Authentication인터페이스를 구현한 구현 클래스로 이 과정에서의 Authentication은 아직 인증이 되지 않은 상태다.

 

3. 인증되지 않은 Authentication을 AuthenticationManager에 전달한다.

- AuthenticationManager는 인증 처리를 총괄하는 매니저 역할의 인터페이스고, 이 인터페이스를 구현한 구현 클래스가 ProviderManager다. 이 클래스는 인증이라는 작업을 총괄하는 매니저다.

 

4. ProviderManager에서 Authentication을 AuthenticationProvider로 전달한다.

 

5. AuthenticationProvider는 UserDetailsService를 이용해 UserDetails를 조회한다.

- UserDetails : 데이터베이스 등의 저장소에 저장된 사용자의 Username, 사용자의 자격을 증명하는 크리덴셜인 Password, 사용자의 권한 정보를 포함하고 있는 컴포넌트

- UserDetailsService는 UserDetails를 제공하는 컴포넌트다.

 

6. 데이터베이스 등의 저장소에서 크리덴셜을 조회한다.

 

7. 조회한 크리덴셜을 포함한 사용자의 정보를 기반으로 UserDetails를 생성한다.

 

8, 생성한 UserDetails를 AuthenticationProvider에게 전달한다.

- UserDetails를 받은 AuthenticationProvider는 PasswordEncoder를 이용해 UserDetails에 포함된 암호화된 Password와 인증을 위한 Authentication 내부에 포함된 Password와 일치하는지 검증한다.

 

9. 검증이 성공하면 UserDetails를 이용해 인증된 Authentication을 생성한다.

- 검증이 실패하면 Exception 발생하고 인증 처리를 중단한다.

 

10. AuthenticationProvider는 인증된 Authentication을 ProviderManager에게 전달한다.

 

11. 인증된 Authentication을 UsernamePasswordAuthenticationFilter에 전달한다.

 

12. 인증된 Authentication을 전달 받은 UsernamePasswordAuthenticationFilter는 SecurityContextHolder를 이용해 SecurityContext에 인증된 Authentication을 저장한다.

- SecurityContext는 Spring security의 세션 정책에 따라 HttpSession에 저장되어 사용자의 인증상태를 유지하기도 하고, HttpSesstion을 생성하지 않고 무상태를 유지하기도 한다.

 

'Spring' 카테고리의 다른 글

토큰 기반 자격 증명  (0) 2023.03.20
Spring Security의 권한 부여 처리 흐름  (0) 2023.03.17
Spring Security의 웹 요청 처리  (0) 2023.03.16
Spring Security  (0) 2023.03.16
애플리케이션 빌드/실행/배포  (0) 2023.03.10