[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의 컴포넌트들이 어떤 과정을 거쳐 사용자의 인증 요청을 처리하는지 흐름 이해하기
- 사용자가 로그인 폼 등을 이용해 로그인 ID와 Password를 포함한 Request를 Spring Security가 적용된 애플리케이션에 전송
→ 사용자의 로그인 요청이 Spring Security의 Filter Chain 까지 들어오면 여러 Filter들 중에서
UsernamePasswordAuthenticationFilter 가 해당 요청 전달받음 - 사용자의 요청을 전달받은 UsernamePasswordAuthenticationFilter 가 ID와 Password를 이용해
UsernamePasswordAuthenticationToken 생성
※ UsernamePasswordAuthenticationToken 은 Authentication 인터페이스를 구현한 구현 클래스이며 Authentication은 아직 인증이 되지 않은 Authentication임! - 인증되지 않은 Authentication을 가지고 있는 UsernamePasswordAuthenticationFilter는 해당 Authentication을 AuthenticationManager에게 전달
→ AuthenticationManager는 인증 처리를 총괄하는 매니저 역할을 하는 인터페이스
→ AuthenticationManager를 구현한 구현 클래스가 ProviderManager(실직적인 매니저) - 인증을 대신 처리해줄 AuthenticationProvider에게 Authentication을 전달하고 이 AuthenticationProvider는
User DetiailService를 이용해 UserDetails 조회
→ UserDetails는 데이터베이스 등의 저장소에 저장된 사용자의 Username과 사용자의 자격을 증명해 주는 크리덴셜(Credential)인 Password 그리고 사용자의 정보 권한 정보를 포함하고 있는 컴포넌트 - UserDetailsService는 데이터베이스 저장소에서 사용자의 크리덴셜(Credential) 포함한 사용자의 정보 조회함
- 위에서 조회한 사용자 정보를 기반으로 UserDetails 생성한 후, 생성된 UserDetails를 AuthenticationProvider에 전달
- AuthenticationProvider는 PasswordEncoder 이용하여 암호화된 Password와 인증을 위한 Authentication 안에 포함된 Password가 일치하는지 검증
- 검증에 성공하면 UserDetails를 이용해 인증된 Authentication 생성하고 성공하지 못하면 Exception 발생시키고 인증 처리 중단
- AuthenticationProvider는 인증된 Authentication을 ProviderManager에게 전달함
→ 처음에는 인증을 위해 필요한 사용자의 로그인 정보를 가지고 있었다면 지금은 인증에 성공한 사용자의 정보(Principal, credential, GrantedAuthorities)를 가지고 있음! - ProviderManager는 인증된 Authentication을 다시 UsernamePasswordAuthenticationFilter에게 전달
- UsernamePasswordAuthenticationFilter는 마지막으로 SecurityContextHolder를 이용해 SecurityContext에 인증된 Authentication 저장
※ SecurityContext는 이후에 Spring Security의 세션 정책에 따라서 HttpSession에 저장되어 사용자의 인증 상태를 유지하기도 하고 HttpSession을 생성하지 않고 무상태를 유지하기도 함
'SEB_BE_45 > 공부 정리' 카테고리의 다른 글
[Section4] Oauth2 인증(Authentication) (0) | 2023.07.17 |
---|---|
[Section 4] 인증/보안 기초 (0) | 2023.07.11 |
[Section3] Spring MVC - 애플리케이션 빌드/실행/배포 (0) | 2023.07.05 |
[Section3] Spring MVC - API 문서화 2 (0) | 2023.07.04 |
[Section3] Spring MVC - API 문서화 (0) | 2023.07.03 |