- 사용자의 로그인 요청을 처리하는 Spring Security Filter는 UsernamePasswordAuthenticationFilter 이다.
- UsernamePasswordAuthenticationToken은 Authentication 인터페이스를 구현한 구현 클래스이며, 여기서의 Authentication 은 ⭐ 아직 인증이 되지 않은 Authentication을 의미한다.
- AuthenticationManager는 인증 처리를 총괄하는 매니저 역할을 하는 인터페이스이고, AuthenticationManager를 구현한 구현 클래스가 ProviderManager 이다.
- UserDetails 는 사용자의 자격을 증명해주는 크리덴셜(Credential) 즉, 데이터베이스 등의 저장소에 저장된 사용자의 Username과 Password, 그리고 사용자의 권한 정보를 포함하고 있는 컴포넌트이다.
- UserDetails 를 제공하는 컴포넌트가 바로 UserDetailsService 입니다.
- UserDetailsService 는 데이터베이스 등의 저장소에서 사용자의 크리덴셜(Credential)을 조회하여 AuthenticationProvider 에게 제공한다.
- UsernamePasswordAuthenticationFilter가 생성하는 Authentication은 인증을 위해 필요한 사용자의 로그인 정보를 가지고 있지만, ⭐ AuthenticationProvider 가 생성한 Authentication은 인증에 성공한 사용자의 정보(Principal, Credential, GrantedAuthorities)를 가지고 있다.
- 인증된 Authentication을 전달 받은 UsernamePasswordAuthenticationFilter는 SecurityContextHolder를 이용해 SecurityContext 에 인증된 Authentication을 저장한다. SecurityContext는 다시 HttpSession 에 저장되어 사용자의 인증 상태를 유지한다.
- UsernamePasswordAuthenticationFilter 는 클라이언트로부터 전달 받은 Username과 Password를 Spring Security가 인증 프로세스에서 이용할 수 있도록 UsernamePasswordAuthenticationToken 을 생성한다.
- AbstractAuthenticationProcessingFilter는 HTTP 기반의 인증 요청을 처리하지만 실질적인 인증 시도는 하위 클래스에 맡기고, 인증에 성공하면 인증된 사용자의 정보를 SecurityContext에 저장하는 역할을 한다.
- Authentication은 Spring Security에서의 인증 자체를 표현하는 인터페이스이다.
- AuthenticationManager는 이름 그대로 인증 처리를 총괄하는 매니저 역할을 하는 인터페이스이며, 인증을 위한 실질적인 관리는 AuthenticationManager를 구현하는 구현 클래스를 통해 이루어진다.
- ProviderManager는 이름에서 유추할 수 있듯이 AuthenticationProvider를 관리하고, AuthenticationProvider에게 인증 처리를 위임하는 역할을 한다.
- AuthenticationProvider는 AuthenticationManager로부터 인증 처리를 위임 받아 실질적인 인증 수행을 담당하는 컴포넌트이다.
- UserDetails 는 사용자의 자격을 증명해주는 크리덴셜(Credential) 즉, 데이터베이스 등의 저장소에 저장된 사용자의 Username과 Password 그리고 사용자의 권한 정보를 포함하는 컴포넌트이며, AuthenticationProvider 는 UserDetails를 이용해 자격 증명을 수행한다.
- UserDetailsService는 UserDetails를 로드(load)하는 핵심 인터페이스이다.
- SecurityContext는 인증된 Authentication 객체를 저장하는 컴포넌트이고, SecurityContextHolder는 SecurityContext를 관리하는 역할을 담당한다.
'공부 일지 > 프로그래밍 언어' 카테고리의 다른 글
[Git] Git 기초 (0) | 2022.10.05 |
---|---|
[Security] JWT (0) | 2022.09.29 |
[Security] 기본 (0) | 2022.09.22 |
스프링 프레임워크 기본 (0) | 2022.08.28 |
스프링 웹개발 기초 (2) (0) | 2022.08.28 |