•
스프링 시큐리티에서 사용자를 정의하는 UserDetails
•
사용자가 실행할 수 있는 작업을 정의하는 GrantedAuthority
•
UserDetailsService 계약을 확장하는 UserDetailsManager
먼저 UserDetails, GrantedAuthority 계약을 먼저 알아보고, UserDetailsService 를 알아본 후 UserDetailsManager 가 이 인터페이스 계약을 확장하는 법에 대해 알아본다.
그리고 이러한 인터페이스들의 구현(InMemoryUserDetailsManager, JdbcUserDetailsManager) 을 적용하고, 이러한 구현들이 시스템에 적합하지 않을 때 맞춤형 구현을 작성해본다.
사용자 관리를 위해서는 UserDetailsService, UserDetailsManager 인터페이스를 이용한다.
•
UserDetailsService: 사용자 검색
•
UserDetailsManager: 사용자 추가, 수정, 삭제
따라서 사용자를 인증하는 기능한 필요한 경우 UserDetailsService 만 구현하면 되고, 사용자를 관리하려면 둘 다 구현하면 된다.
UserDetails 계약을 구현하여 사용자를 기술하고, 사용자가 수행할 수 있는 작업(=권한)은 GrantedAuthority 인터페이스로 나타낸다.
다음은 사용자 관리를 구현하는 요소간의 종속성이다.
•
UserDetails 계약
◦
UserDetails 인터페이스로 사용자를 기술함
◦
스프링 시큐리티가 관리하는 사용자를 나타냄
•
GrantedAuthority 계약
◦
사용자는 GrantedAuthority 인터페이스로 나타내는 권한을 하나 이상 가짐
◦
사용자에게 허용되는 작업을 정의
•
UserDetailsService 계약
◦
사용자 이름으로 찾은 사용자 세부 정보를 반환함
•
UserDetailsManager 계약
◦
UserDetailsService 를 확장해서 암호 생성, 삭제, 변경 등의 작업을 추가함
•
PasswordEncoder
◦
암호를 암호화 또는 해시하는 방법과, 주어진 인코딩된 문자열을 일반 텍스트 암호와 비교하는 방법을 지정
UserDetails 계약
UserDetails 는 4가지 작업이 가능하다.
•
계정 만료 (isAccountNonExpired())
◦
권한 부여가 실패해야 하면 false 반환, 성공해야 하면 true 반환 (아래 메서드들도 모두 동일)
•
계정 잠금 (isAccountNonLocked())
•
자격 증명 만료 (isCredentialsNonExpired())
•
계정 비활성화 (isEnabled())