2023. 3. 16. 22:28ㆍSpring
◎ Spring Security의 인증 처리 흐름
-> Spring Security에서는 Spring Security Filter Chain을 통해 보안을 위한 작업을 처리한다.
-> 아래의 그림은 Spring Security Filter Chain에 사용자의 인증 요청이 전달되었을 때 그 처리 흐름이다.
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 |