🔐

Spring Security 유저 관리 인터페이스

최민석·2024-06-25

Spring Security 유저 관리 인터페이스

mainimg.jpg

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

usermanagementinterfaces 1 usermanagementinterfaces 2

기본 설정에서 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 user 1

AuthenticationProvider

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

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