1. Authentication
1) 개념
인증 요청 그 자체를 나타내며, 애플리케이션에 접근을 요청한 엔티티의 세부 정보를 담음
2) 특징
- Authentication에는 암호 같은 요구 사항이나 인증 요청에 대한 세부 정보를 더 추가할 수 있음
- Authentication 계약은 Principal 계약을 상속한다
- Principal은 애플리케이션에 접근을 요청하는 사용자를 의미하며, 인증하려는 사용자의 이름 정보 등을 가지고 있다.
- Authentication 계약은 애플리케이션에 접근을 요청한 주체에 대한 정보만 나타내는 것이 아니라 인증 프로세스 완료 여부, 요청한 주체의 권한 컬렉션 정보도 가지고 있다
3) 인터페이스 코드
isAuthenticated()
- 인증 프로세스가 끝났으면 true를 반환하고, 아직 진행 중이면 false를 반환
getCredentials()
- 인증 프로세스에 이용된 암호나 비밀을 반환
getAuthorities()
- 인증된 요청에 허가된 권한의 컬렉션을 반환
public interface Authentication extends Principal, Serializable {
Collection<? extends GrantedAuthority> getAuthorities();
Object getCredentials();
Object getDetails();
Object getPrincipal();
boolean isAuthenticated();
void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException;
}
2. AuthenticationProvider
1) 개념
인증 논리 처리
2) 구현 방법
- 시스템의 사용자를 찾는 책임을 UserDetailsService에 위임
- PasswordEncoder로 인증 프로세스에서 암호를 관리
3) 코드
authenticate()
- Authentication 객체를 매개 변수로 받고 Authentication 객체를 반환
- 인증에 실패하면 메서드는 AuthenticationException을 투척
- 메서드가 현재 AuthenticationProvider 구현에서 지원되지 않는 인증 객체를 받으면 null 을 반환
- 메서드는 완전히 인증된 객체를 나타내는 Authentication 인스턴스를 반환해야 하며, 이 인스턴스에서 암호와 같은 민감한 데이터는 제거되어야 함
supports()
- 현재 AuthenticationProvider가 Authentication 객체로 제공된 형식을 지원하면 true를 반환하도록 구현
- 이 메서드가 true를 반환해도 authenticate() 메서드가 null을 반환해 요청을 거부할 수 있음. 이는 인증가능한 형식이긴 하나 해당 인증공급자로는 불가능함을 의미함. 즉, 다른 인증공급자를 이용해야 하는 것
public interface AuthenticationProvider {
Authentication authenticate(Authentication authentication) throws AuthenticationException;
boolean supports(Class<?> authentication);
}
'Spring > security' 카테고리의 다른 글
[시큐리티] 권한과 역할제어 (0) | 2023.03.21 |
---|---|
[시큐리티] SecurityContext (0) | 2023.03.16 |
[시큐리티] PasswordEncoder (0) | 2023.03.15 |
[시큐리티] UserDetailsService (0) | 2023.03.13 |
[시큐리티] 구성 요소 재정의 (0) | 2023.03.10 |