본문 바로가기

Language/Spring Security

사용자 상세 - UserDetails

시큐리티 인증 / 인가 흐름도

 

 

  • UserDetails
    • 사용자의 기본 정보를 저장하는 인터페이스로서 Spring Security에서 사용 하는 사용자 타입
      • 개발자마다 여러 도메인 객체를 생성(User, UserDao, UserDto 등)하면 스프링 시큐리티가 인식 할 수 없음
      • 하지만, UserDetails에 담게 되면 스프링 시큐리티는 UserDetails만 바라보기 때문에 어떤 타입이든 문제가 없음
    • 저장된 사용자 정보는 추후에 인증 절차에서 사용되기 위해 Authentication 객체에 포함되며 구현체로서 User클래스가 제공
  • UserDetails 메서드
메서드 설명
isCredentialIsNonExpired() 비밀번호가 유효 기간이 지났는지를 확인
→ 유효 기간 만료 시 비밀번호 인증 불가
isAccountNonExpired() 사용자 계정의 유효기간이 지났는지를 나타냄
→ 기간이 만료된 계정 인증 불가
getUsername() 사용자에게 부여된 권한을 반환(null 반환 불가)
getAuthorities() 사용자가 잠겨 있는지 아닌지를 나타냄
→ 잠긴 사용자 인증 불가
getPassword() 사용자 인증에 사용된 비밀번호 반환
isEnabled() 사용자 활성화 여부
→ 비활성화된 사용자 인증 불가

 


  1. Provider → UserDetailsServcie → UserRepository를 통해 사용자 정보를 가지고 옴
  2. 가져온 사용자 정보(UserInfo)를 UserDetails 타입으로 변환
  3. UserDetails를 Provider에 반환
  4. Provider는 반환 받은 UserDetails에 있는 정보를 토대로 Authentication 객체 생성