데브코스 W10D2

코끼릭·2022년 5월 23일
0

TIL

목록 보기
29/36

Spring Security Architecture

웹요청을 가로챈 후 사용자를 인증하고 인증된 사용자가 적절한 권한을 지니고 있는지 확인하는 과정으로 인증, 인가가 이뤄진다.

Chain of Responsibility

디자인 패턴 중 하나로 작업 요청을 받은 객체가 실제 작업자에게 책임을 위임하는 구조에서 사용되는 기법으로
작업자 간 연결고리를 통해 새로운 작업자를 중간에 추가하거나 삭제하는 것이 용이한 구조로 스프링에서 사용자 요청에 대한 인증, 인가 작업을 처리하는 스프링 시큐리티에서 사용되는 구조가 대표적인 Chain of Responsibility의 사용 예시이다.

FilterChainProxy

보안과 관련된 인증과 인가가 이뤄지는 과정이 동작하기 위해 구현된 아키텍처의 핵심 기능으로 웹요청을 수신한 서블릿 컨테이너 상의 FilterChain 중 하나인 DelegatingFilterProxy에서 Spring Security와 관련된 기능들을 담당하는 FilterChainProxy에 작업을 위임하게 되고 FilterChainProxy는 FilterChain 구현체 Filter들로 인증, 인가 작업을 위임하게 된다.

  1. DelegatingFilterProxy 내 doFilter 메소드 호출
  2. FilterChainProxy 내 doFilterInternal 메소드 호출
  3. VirtualFilter 내 doFilter 메소드 호출하고 SecurityFilter 호출
  4. SecurityFilter 내 doFilter 메소드 호출 후 3으로 반환

Security Filter

Filter 이름설명
ChannelProcessingFilter웹 요청이 어떤 프로토콜로 (http 또는 https) 전달되어야 하는지 처리
SecurityContextPersistenceFilterSecurityContextRepository를 통해 SecurityContext를 Load/Save 처리
LogoutFilter로그아웃 URL로 요청을 감시하여 매칭되는 요청이 있으면 해당 사용자를 로그아웃 시킴
UsernamePasswordAuthenticationFilterID/비밀번호 기반 Form 인증 요청 URL(기본값: /login) 을 감시하여 사용자를 인증함
DefaultLoginPageGeneratingFilter로그인을 수행하는데 필요한 HTML을 생성함
RequestCacheAwareFilter로그인 성공 이후 인증 요청에 의해 가로채어진 사용자의 원래 요청으로 이동하기 위해 사용됨
SecurityContextHolderAwareRequestFilter서블릿 3 API 지원을 위해 HttpServletRequest를 HttpServletRequestWrapper 하위 클래스로 감쌈
RememberMeAuthenticationFilter요청의 일부로 remeber-me 쿠키 제공 여부를 확인하고, 쿠키가 있으면 사용자 인증을 시도함
AnonymousAuthenticationFilter해당 인증 필터에 도달할때까지 사용자가 아직 인증되지 않았다면, 익명 사용자로 처리하도록 함
ExceptionTranslationFilter요청을 처리하는 도중 발생할 수 있는 예외에 대한 라우팅과 위임을 처리함
FilterSecurityInterceptor접근 권한 확인을 위해 요청을 AccessDecisionManager로 위임

SSL

HTTPS(HyperT ext Transfer Protocol Secure)는 HTTP 프로토콜의 암호화 버전으로 SSL(Secure Sockets Layer)을 사용하게 되면 클라이언트와 주고 받는 모든 데이터가 암호화 되어 있게 된다.

  1. 서버는 SSL인증서를 클라이언트에 전달함
  2. 클라이언트는 서버가 전달한 SSL 인증서를 검증하고, 신뢰할 수 있는 서버인지 확인함
  3. 신뢰할 수 있는 서버라면 SSL 인증서의 공개키를 이용해 실제 데이터 암호화에 사용될 대칭키방식의 암호화키를 암호화하여 서버에 전달함

RSA 암호화

  • Rivet, Shamir, Adelman 세사람의 첫이름을 따 RSA 라고 하며, 공개키 암호 알고리즘
  • 공개 키, 비밀 키가 한 쌍으로 존재하며 공개 키는 누구나 알 수 있지만 그에 대응하는 비밀 키는 키의 소유자만이 알 수 있어야함
  • 특정한 비밀 키를 가지고 있는 사용자만 내용을 열어볼 수 있음
  • 실제 데이터를 암호화하기 위한 대칭 키를 공개 키로 암호화하고 통신 상대에게 전달하는 방식으로 많이 쓰임
profile
ㅇㅅㅇ

0개의 댓글