Spring Security 유저 관리 인터페이스
Spring Security 유저 관리 인터페이스
기본 설정에서의 스프링 시큐리티 시퀀스
기본 설정에서 AuthenticationManager
의 구현체인 ProviderManager
를 사용하고,
AuthenticationProvider
의 구현체인 DaoAuthenticationProvider
를 사용했다.
DaoAuthenticationProvider
는 UserDetailsService
의 확장인 UserDetailsManager
의 구현체인 InMemoryUserDetailsManager
를 사용했다.
위 내용은 아주 중요하니 숙지하고 들어가야 한다.
UserDetails
이전 섹션에서 설명한 UserDetailsService
/UserDetailsManager
는 유저 정보를 표현하기 위해 UserDetails
인터페이스를 사용한다.
한 번 UserDetails
인터페이스를 살펴보자
public interface UserDetails extends Serializable {
Collection<? extends GrantedAuthority> getAuthorities();
String getPassword();
String getUsername();
default boolean isAccountNonExpired() {
return true;
}
default boolean isAccountNonLocked() {
return true;
}
default boolean isCredentialsNonExpired() {
return true;
}
default boolean isEnabled() {
return true;
}
}
getAuthorities
: 이 메서드는 엔드 유저의 권한 또는 역할 목록을 보유하고 있고 그래서 이를 이용하여 인가 또는 역할 기반 엑세스 메커니즘을 구현할 수 있다.getPassword
: 엔드 유저의 비밀번호를 반환한다.getUsername
: 엔드 유저의 유저 이름을 반환한다.- 기본 세부 정보 이후에 유저 계정이 만료되었는지, 잠겨 있는지, 자격 증명이 만료되었는지 등을 확인하는데 도움이 되는 몇가지 다른 메서드들도 제공한다.
User
스프링 시큐리티 팀은 UserDetails
를 구현한 User
를 샘플로 제공한다. 우리는 이 User
구현체가 마음에 들지 않으면 커스텀한 새로운 UserDetails
구현체를 만들어도 되지만, User
가 만족스러우면 그냥 User
를 사용해도 된다.
User
AuthenticationProvider
실제 인증을 수행하는 로직은 모두 AuthenticationProvider
에 들어있다. authenticate
메서드가 바로 그것이다.
인증 수행이 가능한 AuthenticationProvider
는 UserDetailsService
/UserDetailsManager
를 통해 UserDetails
정보를 받아서 Authentication
객체를 갱신하여 필터로 반환한다.
💡AuthenticationProvider는 UserDetails를 반환하는 메서드를 제공하고,
AuthenticationManager는 UserDetails를 통해 Authentication 객체를 완성한다.