Spring Security 유저 관리 인터페이스

mainimg.jpg

기본 설정에서의 스프링 시큐리티 시퀀스

a1.png a2.png

기본 설정에서 AuthenticationManager의 구현체인 ProviderManager를 사용하고,
AuthenticationProvider의 구현체인 DaoAuthenticationProvider를 사용했다.
DaoAuthenticationProviderUserDetailsService의 확장인 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 a3.png

AuthenticationProvider

실제 인증을 수행하는 로직은 모두 AuthenticationProvider에 들어있다. authenticate메서드가 바로 그것이다. 인증 수행이 가능한 AuthenticationProviderUserDetailsService/UserDetailsManager를 통해 UserDetails정보를 받아서 Authentication객체를 갱신하여 필터로 반환한다.

💡AuthenticationProvider는 UserDetails를 반환하는 메서드를 제공하고,
AuthenticationManager는 UserDetails를 통해 Authentication 객체를 완성한다.