🥞 BE
home

사용자 관리 & 암호 처리

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

UserDetails 계약

UserDetails 는 4가지 작업이 가능하다.
계정 만료 (isAccountNonExpired())
권한 부여가 실패해야 하면 false 반환, 성공해야 하면 true 반환 (아래 메서드들도 모두 동일)
계정 잠금 (isAccountNonLocked())
자격 증명 만료 (isCredentialsNonExpired())
계정 비활성화 (isEnabled())

GrantedAuthority 계약

UserDetailsService 계약

UserDetailsManager 계약

Reference