사용자 관리
3.1 스프링 시큐리티의 인증 구현
스프링 시큐리티의 인증 흐름
- AuthenticationFilter는 요청을 가로채고 인증 책임을 AuthenticationManager에 위임한다.
- AuthenticationManager는 인증 논리를 구현하기 위해 인증 공급자를 이용한다. AuthenticationProvider는 사용자 이름과 암호를 확인하기 위해 UserDetailsService 및 PasswordEncoder를 이용한다.
- 사용자 관리를 위해서는 UserDetailsService 및 UserDetailsManager 인터페이스를 사용한다.
- UserDetailsService는 사용자 이름으로 사용자를 검색하는 역할만한다. 이 작업은 프레임워크가 인증을 완료하는데 반드시 필요한 유일한 작업이다.
- UserDetailsManager는 대부분의 애플리케이션에 필요한 사용자 추가, 수정, 삭제 작업을 추가한다.
- 두 계약 간의 분리는 인터페이스의 분리 원칙의 훌륭한 예이다.
- 인터페이스를 분리하면 앱에 필요 없는 동작을 구현하도록 프레임워크에서 강제하지 않기 때문에 유연성이 향상된다.
- 사용자 인증만 필요한경우 UserDetailsService 계약(인터페이스)만 구현하면 필요한 기능을 제공할 수 있게 된다는 뜻.
- 사용자를 관리하려면 UserDetailsService 및 UserDetailsManager 구성 요소에 사용자를 나타내는 방법이 필요하다.
3.2 사용자 기술하기
- 스프링 시큐리티가 사용자를 이해할 수 있도록 애플리케이션의 사용자를 기술하는 방법을 배운다.
- 프레임워크가 사용자를 인식할 수 있게 사용자를 나타내는 방법을 배우는 것은 인증 흐름을 구축하기 위한 필수 단계이다.
- 스프링 시큐리티에서 사용자 정의는 UserDetails 계약(인터페이스)를 준수해야 한다. UserDetails는 스프링 시큐리티가 이해하는 방식으로 사용자를 나타낸다. 애플리케이션에서 사용자를 기술하는 클래스는 프레임워크가 이해할 수 있도록 이 인터페이스를 구현해야함