스프링 시큐리티 정리

JooHeon·2022년 1월 13일
0

용어 정리

httpBasic : 유저 id, password로 들어오는 방식
csrf : 사이트간 요청 위조 프로텍션 (rest api는 필요없기 때문에 disable)
sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) : 세션 사용 X
cors : 교차 출처 리소스 요청(Cors Filter가 필요한 이유)
antMatcher : 인증된 이용자만 사용할 수 있는 url 설정

설계 과정

스프링 시큐리티

  • cors 필터를 넣는다.
  • 스프링 시큐리티 필터 체인 중 하나를 인터셉트해서 커스텀 필터를 만든다(Authentication) -> session에 admin과 같은 권한 정보를 넣어두기 위해
  • Authentication이 Details라는 유저 정보를 저장하기 위해서 Details를 만든다.
  • 로그인을 하기위한 서비스(DetailsService)를 만든다.
    일반 서비스 로직이 아닌 스프링 시큐리티 라이프 사이클을 따르기위해 UserDetailsService를 상속받아 만든다.

필터 체인 라이프사이클


SecurityContextPersistenceFilter : SecurityContextRepository에서 SecurityContext를 가져오거나 저장하는 역할을 한다. (SecurityContext는 밑에)
LogoutFilter : 설정된 로그아웃 URL로 오는 요청을 감시하며, 해당 유저를 로그아웃 처리
(UsernamePassword)AuthenticationFilter : (아이디와 비밀번호를 사용하는 form 기반 인증) 설정된 로그인 URL로 오는 요청을 감시하며, 유저 인증 처리
AuthenticationManager를 통한 인증 실행
인증 성공 시, 얻은 Authentication 객체를 SecurityContext에 저장 후 AuthenticationSuccessHandler 실행
인증 실패 시, AuthenticationFailureHandler 실행
DefaultLoginPageGeneratingFilter : 인증을 위한 로그인폼 URL을 감시한다.
BasicAuthenticationFilter : HTTP 기본 인증 헤더를 감시하여 처리한다.
RequestCacheAwareFilter : 로그인 성공 후, 원래 요청 정보를 재구성하기 위해 사용된다.
SecurityContextHolderAwareRequestFilter : HttpServletRequestWrapper를 상속한 SecurityContextHolderAwareRequestWapper 클래스로 HttpServletRequest 정보를 감싼다. SecurityContextHolderAwareRequestWrapper 클래스는 필터 체인상의 다음 필터들에게 부가정보를 제공한다.
AnonymousAuthenticationFilter : 이 필터가 호출되는 시점까지 사용자 정보가 인증되지 않았다면 인증토큰에 사용자가 익명 사용자로 나타난다.
SessionManagementFilter : 이 필터는 인증된 사용자와 관련된 모든 세션을 추적한다.
ExceptionTranslationFilter : 이 필터는 보호된 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달하는 역할을 한다.
FilterSecurityInterceptor : 이 필터는 AccessDecisionManager 로 권한부여 처리를 위임함으로써 접근 제어 결정을 쉽게해준다.

JWT

  • JwtTokenProvider 생성
  • 로그인시 컨트롤러에서 JwtTokenProvider를 사용해 사용자 정보를 토큰으로 만들어서 반환
  • cors 필터에 걸리는 모든 컨트롤러에서 커스텀 필터가 인터셉터해서 Request Header에 있는 토큰으로 사용자 인증
  • antMatcher가 걸린 url은 토큰 정보가 인증되지 않으면 접근이 불가능

0개의 댓글