Spring/security

[시큐리티] AuthenticationProvider

라임온조 2023. 3. 15. 18:09

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