이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
인증 흐름 이해 - AuthenticationFlow
- 클라이언트가 로그인을 요청한다.
- UsernamePasswordAuthenticationFilter (form 인증 방식에서 작동)가 사용자의 로그인 요청 정보를 받아 Authentication 객체를 생성한다.
- 사용자가 로그인 시 입력한 아이디, 패스워드 정보를 Authentication 객체에 담는다.
- AuthenticationManager 클래스에게 인증 처리를 맡긴다.
- 이때 생성한 Authentication 객체를 함께 전달한다.
- AuthenticationManager는 Authentication을 받는다.
- AuthenticationManager는 다음 작업을 수행한다.
- 인증의 전반적인 관리 (인증 관리자)
- 실제 인증 역할 하지 않고 적절한 AuthenticationProvider 객체를 찾아 인증을 위임
- AuthenticationManager는 다음 작업을 수행한다.
- AuthenticationProvider는 Authentication 객체를 전달 받는다.
- 실제 인증 처리 역할 (아이디, 패스워드 검사)
- 유저 유효성 검증 (패스워드 체크 등)
- UserDetailService 인터페이스에게 아이디(=username)을 전달하며 User객체를 요청한다.
- UserDetailService는 유저 객체를 조회한다.
- Repository로부터 유저 객체를 조회한다. (아이디 검증)
- 만약 존재하지 않으면 예외가 발생한다. (인증 실패)
- 예외는 UsernamePasswordAuthenticationFilter가 받아 처리한다.
- 만약 존재하지 않으면 예외가 발생한다. (인증 실패)
- UserDetails 타입으로 반환한다.
- Repository로부터 유저 객체를 조회한다. (아이디 검증)
- AuthenticationProvider는 UserDetails 객체를 반환받는다. (이떄 아이디는 검증이 된 상태)
- 패스워드를 검사해야 하므로 UserDetails 객체의 패스워드와 비교한다.
- 만약 일치하지 않으면 예외를 발생시킨다. (인증 실패)
- 일치한다면 최종적으로 인증에 성공해 UserDetails + authoriteis를 담은 인증 후 토큰 객체 (Authentication)를 생성해 AuthenticationManager에게 반환한다.
- 패스워드를 검사해야 하므로 UserDetails 객체의 패스워드와 비교한다.
- AuthenticationManager는 Authentication 객체를 UsernamePasswordAuthenticationFilter에게 반환한다.
- UsernamePasswordAuthenticationFilter는 SecurityContext에 인증 객체를 저장한다.
'스프링 시큐리티 > 스프링 시큐리티 주요 아키텍처 이해' 카테고리의 다른 글
인증 처리자 - AuthenticationProvider (0) | 2023.02.08 |
---|---|
인증 관리자: AuthenticationManager (0) | 2023.02.08 |
인증 저장소 필터 - SecurityContextPersistenceFilter (0) | 2023.01.31 |
인증 저장소 - SecurityContextHolder, SecurityContext (0) | 2023.01.31 |
인증 개념 이해 - Authentication (0) | 2023.01.30 |