1. Principal (주체)
- 정의:
인증이 성공적으로 수행된 후, 애플리케이션에서 작업을 수행할 수 있는 사용자 계정 정보를 뜻한다.
사용자의 ID, 이메일, 사용자 객체 등이 포함될 수 있다. - 사용:
SecurityContext 또는 Authentication 객체를 통해 접근 가능.
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();
2. Authentication (인증)
- 정의:
사용자가 애플리케이션에 접근하기 전에 본인임을 증명하는 절차. - 구성 요소:
- Principal: 사용자의 계정 정보.
- Credentials: 사용자의 신원 확인을 위한 정보(예: 비밀번호).
- Authorities: 사용자가 가진 권한 정보.
- 인증 절차:
- 사용자가 자격 증명(Credentials)을 제공.
- 인증 매니저(AuthenticationManager)가 자격 증명을 검증.
- 인증 성공 시 Authentication 객체 생성.
Authentication authentication = new UsernamePasswordAuthenticationToken(principal, credentials);
3. Credential (크리덴셜, 자격 증명)
- 정의:
사용자의 신원 확인을 위한 정보. - 예:
- 비밀번호(Password).
- 인증 토큰(Token).
- 기타 인증에 필요한 정보.
4. Authorization (인가 또는 권한 부여)
- 정의:
인증된 사용자가 특정 리소스에 접근할 권한이 있는지 확인. - 방법:
일반적으로 Role 또는 Authority를 사용하여 권한 부여.
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String adminAccess() {
return "Admin page";
}
- Authorization 흐름:
- 인증된 사용자의 권한 목록 확인.
- 요청한 리소스에 대한 접근 권한과 비교.
- 권한이 있으면 접근 허용, 없으면 거부.
스프링 시큐리티 용어 간 관계
- Principal: 인증된 사용자의 계정 정보.
- Authentication: 인증 과정을 통해 생성된 객체.
- Credential: 인증 시 제공되는 자격 증명.
- Authorization: 인증 후 권한 검사를 통해 리소스 접근을 제어.
정리
스프링 시큐리티는 인증(Authentication)과 인가(Authorization) 기반으로 사용자와 애플리케이션 간의 보안을 관리한다.
- 인증: "이 사용자가 진짜 맞는가?"를 확인.
- 인가: "이 사용자가 이 작업을 할 수 있는가?"를 확인.