UsernamePasswordAuthentication에서 제공한 Username과 Password를 이용해 만든 Authentication은 인증을 위해 만든 것이므로 당연히 인증이 안되어 있다.
-> 인증 절차를 거쳐야 한다.
UsernamePasswordAuthenticationFilter
AbstractAuthenticationProceccingFilter를 상속
Filter의 역할을 하기위해서는 doFilter() 메서드가 존재해야 하지만, UsernamePasswordAuthentication에 존재하지 않고, AbstractAuthenticationProcessingFilter 클래스에 존재한다.
AbstractAuthenticationProcessingFilter
Spring Security에서 제공하는 Filter 중 하나
UsernamePasswordAuthenticationToken
AbstractAuthenticationToken 추상 클래스를 상속하는 확장 클래스
+ Authentication 인터페이스를 구현하는 구현 클래스
인증 전 -> Username, Password만 있는 Authentication 생성
인증 후 -> Username, Password, Collection<Granted Authority(권한)>가 포함된 Authentication 생성
Authentication
Spring Security에서 인증 자체를 표현하는 인터페이스
Principal 인터페이스와, Serializable 인터페이스를 상속
AuthenticationManager
Filter는 AuthenticationManager를 통해 느슨한 결합을 유지하고 있다.
ProviderManager
AuthenticationManaber의 구현체.
ProviderManager만 구현을 할 수 있는 것은 아니다. 하지만 Spring Security에서 AuthenticationManger의 구현체는 일반적으로 ProviderManager를 가리킨다.
AuthenticationProvider
AuthenticationManager로부터 인증 처리를 위임받아 처리하는 컴포넌트
Username/Password 기반의 인증 처리는 DaoAuthenticationProvider가 담당
UserDetails를 이용해 자격증명을 수행
AbstractUserDetailsAuthenticationProvider를 상속한 확장 클래스
AbstractUserDetialsAuthenticationProvider
Authentication 인터페이스의 구현 클래스
이 클래스의 authenticate() 메서드로부터 실질적인 인증절차가 시작된다.
순서
1. AbstractUserDetailsAuthenticationProvider의 authenticate() 메서드 호출
2. DaoAuthenticationProvider의 retrieveUser() 호출
3. DaoAuthenticationProvider의 additionalAuthenticationChecks() 메서드 호출
4. DaoAuthenticationProvider의 createSuccessAuthentication() 메서드 호출
5. AbstractUserDetailsAuthenticationProvider의 createSuccessAuthentication() 메서드 호출
6. 인증된 Authentication을 ProviderManager에 리턴
UserDetails
Username과 자격을 증명하는 Credential, 사용자의 권한 정보를 포함하는 컴포넌트
UserDetailsService
UserDetails를 로드하는 인터페이스
SecurityContext
Authentication 객체를 저장하는 컴포넌트
SecurityContextHolder
SecurityContext를 관리하는 역할
Spring Security는 SecurityContextHolder에 의해 SecrityContext에 값이 채워져 있다면 인증된 사용자로 간주
'복습 > Spring' 카테고리의 다른 글
Security 권한 부여 처리 흐름 (0) | 2023.03.17 |
---|