스프링 시큐리티

황희윤·2023년 7월 29일

스프링 시큐리티(Spring Security)

애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크

인증(authentication): 사용자의 신원을 입증하는 과정 (로그인)

인가(authorization): 사용자의 접근 권한을 확인하는 과정 (관리자 페이지)

스프링 시큐리티의 다양한 필터들

  1. SecurityContextPersistenceFilter
  • SecurityContext(접근 주체와 인증에 대한 정보를 담고 있는 객체)를 가져오거나 저장하는 역할
  1. LogoutFilter
  • 설정된 로그아웃 URL로 오는 요청을 확인해 해당 사용자를 로그아웃 처리
  1. UsernamePasswordAuthenticationFilter
  • 인증 관리자로, 아이디와 패스워드를 받으면 인증 요청을 위임
  • 인증이 성공하면 AuthenticationSuccessHandler, 실패하면 AuthenticationFailureHandler를 실행
  1. DefaultLoginPageGeneratingFilter
  • 사용자가 로그인 페이지를 따로 지정하지 않았을 때 기본으로 설정하는 로그인 페이지 관련 필터
  1. BasicAuthenticationFilter
  • 요청 헤더에 있는 아이디와 패스워드를 파싱해서 인증 요청을 위임
  • 인증이 성공하면 AuthenticationSuccessHandler, 실패하면 AuthenticationFailureHandler를 실행
  1. RequestCacheAwareFilter
  • 로그인 성공 후, 관련 있는 캐시 요청이 있는지 확인하고 캐시 요청을 처리
  • ex) 비로그인 상태로 방문했던 페이지를 기억해 두었다가, 로그인 이후에 그 페이지로 이동
  1. SecurityContextHolderAwareRequestFilter
  • HttpServletRequest 정보를 감싼다.
  1. AnonymousAuthenticationFilter
  • 필터가 호출되는 시점까지 인증되지 않았다면 익명 사용자 전용 객체인 Anonymous Authentication을 만들어 SecurityContext에 넣어준다.
  1. SessionManagementFilter
  • 인증된 사용자와 관련된 세션 관련 작업을 진행한다.
  • 세션 변조 방지 전략을 설정
  • 유효 하지 않은 세션에 대한 처리
  • 세션 생성 전략을 세움
  1. ExceptionTranslationFilter
  • 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달
  1. FilterSecurityInterceptor
  • 접근 결정 관리자로 권한 부여 처리를 위임해 접근 제어 결정을 쉽게 한다.
  • 이 과정에서는 이미 사용자가 인증되어 있어 유효한 사용자인지 알 수 있기 때문에 인가 관련 설정도 가능하다.

스프링 시큐리티 폼 로그인의 인증 처리 절차

  1. 사용자가 폼에 아이디와 패스워드를 입력하면, HTTPServletRequest에 아이디와 비밀번호 정보가 전달된다.

    • 이 때 AuthenticationFilter가 넘어온 아이디와 비밀번호의 유효성 검사를 실행
  2. 유효성 검사가 끝나면 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨준다.

  3. 전달받은 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에게 보낸다.

  4. UsernamePasswordAuthenticationToken을 AuthenticationProvider에 보낸다.

  5. 사용자 아이디를 UserDetailService에 보낸다.

    • UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails 객체로 만들어 AuthenticationProvider에 전달
  6. DB에 있는 사용자 정보를 가져온다.

  7. 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리를 한다.

  8. 인증이 완료되면 SecurityContextHolder에 Authentication을 저장

  • 인증이 성공하면 AuthenticationSuccessHandler, 실패하면 AuthenticationFailureHandler를 실행
profile
HeeYun's programming study

0개의 댓글