보안 솔루션을 제공하는 스프링 기반의 하위 프레임워크로 스프링MVC와 분리되어 별도의 filter 기반으로 동작한다.
세션-쿠키 이용한 서버기반의 인증방식이다. https://juran-devblog.tistory.com/4
스프링 시큐리티 주요 키워드
스프링 시큐리티는 일련의 필터들을 갖고 있다. 요청과 인증, 권한 부여는 이 필터들을 통과하며 수행된다.
로그인 요청이 오면 먼저 ApplicationFilter 객체로 이동
→ ApplicationFilter들을 거쳐 DelegatingFilterProxyRegistrationBean 필터를 만남
DelegatingFilterProxyRegistrationBean
DelegatingFilterProxy라는 클래스로 만들어진 스프링 빈으로 등록시켜주는 역할
스프링 부트에서는 @EnableAutoConfiguration 어노테이션을 이용하여
SecurityFilterAutoConfiguration클래스를 로드하고 SpringSecurityFilterChain 빈으로 등록해줌
→ 이 때 스프링 시큐리티가 만든 DelegatingFilterProxy(SpringSecurityFilterChain)이 필터로 동작
SpringSecurityFilterChain
DelegatingFilterProxy가 처리를 위임하는 필터 클래스는 FilterChainProxy로 내부에 체인으로 등록된 필터 순서대로 수행
→ SpringSecurityFilterChain은 스프링에서 보안관 관련된 필터 리스트를 갖고 있는 객체로 필터 리스트를 순회하며 필터링 실시
이 필터 리스트가 바로 AuthenticationFilter
WebAsyncManagerIntegrationFilter | SpringSecurityContextHolder는 ThreadLocal기반으로 동작 (하나의 쓰레드에서 SecurityContext 공유하는 방식) 비동기(Async)와 관련된 기능을 쓸 때에도 SecurityContext를 사용할 수 있도록 만들어주는 필터 * SecurityContext: Authentication 객체를 보관하는 보관 인터페이스 |
SecurityContextPersistenceFilter | SecurityContextRepository에서 SecurityContext를 로드하고 저장 |
HeaderWriterFilter | 응답에 Security와 관련된 헤더 값을 설정해주는 필터 |
CsrfFilter | csrf 공격을 방어하는 필터 |
LogoutFilter | 로그아웃을 요청하는 필터 DefaultLogoutPageGeneratingFilter가 로그아웃 기본 페이지를 생성 |
UsernamePasswordAuthenticationFilter | AuthenticationManager를 통한 인증 실행 성공하면 Authentication객체 SecurityContext에 저장 후AuthenticationSuccessHandler 실행 실패하면 AuthenticationFailureHandler 실행 |
RequestCacheAwareFilter | 로그인 성공 이후 인증 요청에 의해 가로채진 사용자의 원래 요청 정보로 재구성하는 필터 |
AnonymousAuthenticationFilter | 이 필터에 올 때까지 앞에서 사용자 정보가 인증되지 않았다면 익명의 사용자가 보낸 것으로 판단하여 처리 (Authentication 객체를 새로 생성함(AnonymousAuthenticationToken)) |
SessionManagementFilter | 세션 변조 공격 방지 (SessionId를 계속 다르게 변경하여 클라이언트에 전달) 유효하지 않은 세션으로 접근했을 때 URL 핸들링 하나의 세션 아이디로 접속하는 최대 세션 수(동시 접속) 설정 세션 생성 전략 설정 |
ExceptionTranslationFilter | 앞선 필터 처리 과정에서 인증 예외(AuthenticationException) 또는 인가 예외(AccessDeniedException)가 발생한 경우 등 예외 처리(모든 예외를 처리하는 것은 아님) |
FilterSecurityInterceptor | 권한 부여와 관련된 결정을 AccessDecisionManager에게 위임해 접근 권한이 있는지 확인하고 처리하는 필터 |
CSRF 공격과 Session Fixation 공격에 대한 방어 https://juran-devblog.tistory.com/32
[WEB] RESTful API 만들기 (0) | 2021.03.22 |
---|---|
[JPA] 게시판 CRUD (0) | 2021.03.21 |
[SPRING SECURITY] 스프링 부트 환경설정 (0) | 2021.03.14 |
[SPRING BOOT] 디렉터리 구조 (0) | 2021.03.13 |
[SPRING BOOT] 환경설정 (0) | 2021.03.13 |
댓글 영역