Authentication, Principal, UserDetails 객체 차이

haruceki·2024년 9월 13일
0

Authentication

Spring Security에서 인증 정보를 담고 있는 가장 상위 개념이다. 사용자의 인증 상태와 관련된 모든 정보를 포함하며 로그인 성공 후 SecurityContext에 저장되어 SecurityContextHolder를 통해 전역적으로 접근 가능하다.

구성 요소

  • getPrincipal() : 인증된 사용자에 대한 정보를 제공하는 객체를 반환 (일반적으로 UserDetails나 Principal)
  • getAuthorities() : 사용자의 권한 목록 (예: ROLE_USER, ROLE_ADMIN)
  • getCredentials() : 인증 자격 증명 (예: 비밀번호, 인증 토큰)
  • isAuthenticated() : 사용자가 인증되었는지 여부를 반환
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = authentication.getName();

Principal

일반적으로 Java EE에서 사용되는 인터페이스로, 인증된 사용자에 대한 정보를 나타낸다.

Authentication의 getPrincipal() 메서드가 반환하는 객체가 바로 Principal이다.

Principal에는 주로 getName() 메서드가 정의되어 있으며, 주로 사용자 이름 또는 ID와 같은 고유한 식별 정보를 반환한다. 컨트롤러에서 인증된 사용자를 가져올 때 사용한다.

Spring Security에서는 Principal이 UserDetails 객체일 수도 있고, 사용자 정의 객체일 수도 있다.

@GetMapping("/profile")
public String getProfile(Principal principal) {
    String username = principal.getName();
    return "Profile of " + username;
}

UserDetails

Spring Security에서 사용자의 세부 정보를 담는 인터페이스이다. 주로 사용자 이름, 비밀번호, 권한 등의 정보를 제공한다. UserDetailsService를 통해 로드된 사용자 정보가 이 UserDetails에 담긴다.

사용자 인증 및 권한 관리에서 사용되며, 로그인 시 DB나 외부 서비스에서 사용자 정보를 로드할 때 주로 사용된다.

구성요소

  • getUsername(): 사용자의 이름을 반환.
  • getPassword(): 사용자의 비밀번호를 반환.
  • getAuthorities(): 사용자의 권한 목록을 반환.
  • isAccountNonExpired(), isAccountNonLocked(), isCredentialsNonExpired(), isEnabled(): 계정 상태를 나타내는 메서드.
profile
희망도 절망도 없이 매일 코딩을 한다.

0개의 댓글