InMemoryUserDetailsManager
🔘 withDefaultPasswordEncoder 방식
🔘 PasswordEncorder 방식
🔹 User Management (사용자 관리 Interface)
✔️ UserDetailsService (인터페이스)
목적: 특정 사용자의 정보를 로드하는 핵심 인터페이스입니다.
메서드: loadUserByUsername(String username)
설명: 사용자 이름을 기반으로 사용자의 세부 정보를 로드합니다. 일반적으로 인증 과정에서 사용됩니다.
✔️ UserDetailsManager (인터페이스)
목적: UserDetailsService의 확장으로, 새 사용자를 생성하고 기존 사용자를 업데이트하는 기능을 제공합니다.
메서드:
createUser(UserDetails user): 새 사용자 생성
updateUser(UserDetails user): 기존 사용자 업데이트
deleteUser(String username): 사용자 삭제
changePassword(String oldPwd, String newPwd): 비밀번호 변경
userExists(String username): 사용자 존재 여부 확인
설명: 사용자 관리 기능을 위한 중요한 인터페이스로, 사용자 생성, 업데이트, 삭제 등의 작업을 수행할 수 있습니다.
✔️ InMemoryUserDetailsManager (클래스)
✔️ JdbcUserDetailsManager (클래스)
✔️ LdapUserDetailsManager (클래스)
목적: Spring Security 팀에서 제공하는 UserDetailsManager의 구현 예제 클래스들입니다.
설명:
InMemoryUserDetailsManager: 메모리 내에서 사용자 정보를 관리합니다. 주로 개발 및 테스트에 사용됩니다.
JdbcUserDetailsManager: 관계형 데이터베이스를 통해 사용자 정보를 관리합니다.
LdapUserDetailsManager: LDAP 데이터베이스를 통해 사용자 정보를 관리합니다.
🔹 UserDetails & Authentication 관계 (사용자 세부 정보와 인증)
✔️ Principal (인터페이스) ---> Authentication (인터페이스) ---> UsernamePasswordAuthenticationToken (클래스)
메서드:
getName(): 사용자 이름 반환
getPrincipal(): 인증 주체 반환
getAuthorities(): 사용자 권한 반환
getCredentials(): 사용자 자격 증명 반환
getDetails(): 인증 세부 정보 반환
isAuthenticated(): 인증 여부 확인
setAuthenticated(): 인증 상태 설정
eraseCredentials(): 자격 증명 지우기
설명: 인증은 사용자가 자신이 주장하는 사람인지 확인하는 과정입니다. Authentication 인터페이스는 인증 정보를 나타내며, UsernamePasswordAuthenticationToken 클래스는 사용자 이름과 비밀번호를 기반으로 한 인증을 나타냅니다.
사용처: Authentication은 인증이 성공적인지 여부를 판단하는 모든 시나리오에서 반환 타입입니다. 예를 들어, AuthenticationProvider 및 AuthenticationManager 내부에서 사용됩니다.
✔️ UserDetails (인터페이스) ---> User (클래스)
메서드:
getPassword(): 비밀번호 반환
getUsername(): 사용자 이름 반환
getAuthorities(): 사용자 권한 반환
isAccountNonExpired(): 계정 만료 여부 확인
isAccountNonLocked(): 계정 잠금 여부 확인
isEnabled(): 계정 활성화 여부 확인
isCredentialsNonExpired(): 자격 증명 만료 여부 확인
eraseCredentials(): 자격 증명 지우기
설명: UserDetails 인터페이스는 사용자의 세부 정보를 나타냅니다. 이 정보는 인증 과정에서 사용되며, User 클래스는 이를 구현한 예제입니다.
사용처: UserDetails는 저장 시스템에서 사용자 정보를 로드하는 모든 시나리오에서 반환 타입입니다. 예를 들어, UserDetailsService 및 UserDetailsManager 내부에서 사용됩니다.
결론
UserDetails와 Authentication은 Spring Security에서 사용자의 세부 정보와 인증 정보를 나타내는 중요한 구성 요소입니다. UserDetails는 사용자의 세부 정보를 관리하며, Authentication은 인증 과정을 담당합니다. 이 두 요소는 사용자 인증 및 권한 관리의 핵심 역할을 하며, 개발자는 이를 이해하고 적절히 활용해야 합니다.
참고자료
https://www.udemy.com/course/spring-security-6-jwt-oauth2-korean
'Spring > Security' 카테고리의 다른 글
Spring Security 6 - (1) (1) | 2024.09.18 |
---|