Spring/Security

Spring Security 6 - (2)

DongHo 2024. 9. 18. 23:43

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