Spring Security 인정 처리 절차 흐름도(출처 : 코드스테이츠)
✋ Authentication관련 안내
위 Spring Security 인증 처리 흐름도에서 서로 다른 Authentication 등장하여 혼동의 여지가 있어, 아래의 설명해서는 검증 전 Authentication은 (Unauthenticated)Authentication으로 표기하고, 검증 후 인증된 Authentication은 (Authenticated)Authentication으로 표기합니다.
사용자가 로그인 폼 등을 이용해 Username(로그인 ID)와 Password롤 포함한 로그인 Request 전송
UsernamePasswordAuthenticationFilter는 Username과 Password를 이용해 UsernamePasswordAuthenticationToken 생성
UsernamePasswordAuthenticationToken는 생성한 (Unauthenticated)Authentication을 AuthenticationManager에게 전달
ProviderManager는 해당 (Unauthenticated)Authentication을 AuthenticationProvider에게 전달
AuthenticationProvider는 UserDetailsService를 통해 UserDetails를 조회
크리덴셜 저장소에 저장된 크리덴셜 조회
데이터베이스 등 저장소에서 조회한 사용자 정보를 기반으로 UserDetails 생성
UserDetailsService는 새로 생성된 UserDetails를 AuthenticationProvider에게 전달
AuthenticationProvider는 ProviderEncoder를 이용해 전달받은 UserDetails의 암호화된 Password와 (Unauthenticated)Authentication 안에 포함된 Password의 일치하는지 검증
📝 인증된 Authentication의 구성요소
Principal(주체), Credential(크리덴셜), GrantedAuthorities(부여된 권한)
AuthenticationProvider는 인증된 Authentication을 ProviderManager에게 전달
ProviderManager는 인증된 Authentication을 UsernamePasswordAuthenticationFilter에게 전달
UsernamePasswordAuthenticationFilter는 SecurityContextHolder를 이용해 SecurityContext에 인증된 Authentication을 저장
AbstractAuthenticationProcessingFilter의 절차(출처 : https://docs.spring.io)
AuthenticationManager의 역할(출처 : https://docs.spring.io)
ProviderManager의 역할(출처 : https://docs.spring.io)
SecurityContextHolder의 구조(출처 : https://docs.spring.io)