스프링 시큐리티

Mini_me·2023년 2월 4일
0

공부 [Spring]

목록 보기
16/27


기본적으로 여러개의 filter 객체들이 순차적으로 수행되는 방식이다.
기본적으로는 세션 쿠키 방식의 인증이 이뤄진다.
-> 이 인증이 이뤄지는 필터 : "UsernamePasswordAuthenticationFilter"

이 필터는  attemptAuthentication() 이라는 추상메소드가 존재하는데
이 메소드에서 UsernamePasswordAuthenticationToken 클래스와this.getAuthenticationManager()을 봐야한다.

UsernamePasswordAuthenticationToken

  • 추후 인증이 끝나고 SecurityContextHolder.getContext()에 등록될 Authentication 객체이다.**
public UsernamePasswordAuthenticationToken(Object principal, Object credentials) {  
   super(null);  
   this.principal = principal;  
   this.credentials = credentials;  
   setAuthenticated(false);  
}  
  
public UsernamePasswordAuthenticationToken(Object principal, Object credentials,  
      Collection<? extends GrantedAuthority> authorities) {  
   super(authorities);  
   this.principal = principal;  
   this.credentials = credentials;  
   super.setAuthenticated(true); // must use super, as we override  
}
  • 각 생성자는 setAuthenticated(false), setAuthenticated(true)를 실행한다.
  • 아직 인증되지 않은 Authentication 객체를 생성한 것이고 추후 인증이 완료되면 인증된 생성자로 Authentication 객체가 생성된다.

AuthenticationManager

  • AuthenticationProvider라는 클래스 객체를 관리
    - AuthenticationProvider는 실제 인증 로직이 담긴 객체
  • authenticate(Authentication authentication)메소드만 정의되어 있다.
    - authenticate()을 실행하여 authenticationProvider객체를 통해 인증 완료되면
    -> 인증된 Authentication 객체를 반환하는 기능을 한다.
  • AuthenticationProvider 구현체는 인증을 진행할 때, 인증 정보를 담은 Authentication 객체를 가지고 인증을 진행한다.
  • 내가 사용할 Authentication 객체는 UsernamePasswordAuthenticationToken이다.
    - AbstractDetailsAuthenticationProvider 에서 retrieveUser() 메소드가 유저 id와 authentication 객체를가지고 Userdetails 객체를가져온다.
    - AbstractDetailsAuthenticationProvider을 상속받은 또다른 클래스인 DaoAuthenticationProvider 클래스에서
    - retrieveUser()메소드가 UserDetailService 객체를 통해 로그인 요청한 유저의 UserDetails 객체를 가져온다.
    - 그리고 additionalAuthenticationChecks()메소드에서 입력받은 정보와 userDetails의 객체 정보를 비교해 인증을 체크한다. 즉 DB의 데이터와 id, 비밀번호를 입력한 값과 비교하느 곳이라고 할 수 있다.
    - 이렇게 맞다고 판별되면  createSuccessAuthentication(principalToReturn, authentication, user)가 반환된다.
    - 드디어 인증 된 Authentication 객체를 만드는 것이다.

0개의 댓글