You will be fine

<Spring Security> 2. 아키텍쳐

by BFine
반응형

출처 : https://inf.run/4Vam

 

스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의

초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과

www.inflearn.com

가. DelegatingFilterProxy

 a. Security는 어떻게 Filter 기반으로 동작할 수 있을까?

  -  Security는 Servlet Filter 기반으로 Client의 요청을 전처리, 후처리를 통해 보안을 구현한다. 

  -  하지만 Servlet 필터에 Spring Bean 주입하는 것은 불가능 하다.

      => Spring Bean은 Spring Container, Servlet Filter는 Servlet Container 에서 동작  

  -  그래서 Servlet Conatiner에서 동작하는 DelegatingFilterProxy가 요청을 Spring Bean에게
     위임하는 방식을 도입하였기 때문에 Servlet Filter 기반으로 동작할 수 있다. 

 

 b.  FilterChainProxy

  -  위의 DelegatingFilterProxy이 위임하는 주체가 FilterChainProxy 이다.

  -  이는 ApplicationContext에 있는 "springSecurityFilterChain" 이라는 Spring Bean을 가져온다.

    => SecurityFilterAutoConfiguration 에서 구동시 등록된다.

 

나. Filter들

 a. default 설정

  -  설정을 따로 하지 않는 경우에는 아래처럼 15개의 필터가 등록되어 chain 형태로 처리되는 것을 알 수 있다.

  -  이부분은 HttpSecurity의 보안 API를 사용하면 편의에 맞게 Filter를 추가하거나(생성) 대체가 가능하다.

 

다. Authentication 

 a. 인증 정보는 어떻게 처리할까?

  -  가장 중요한 사용자를 식별하는 id 와 password를 담고 있는 객체가 Authentication 이다.

  -  로그인 할때 id 와 password를 가지고 있고 검증을 위해 사용되어 진다.

  -  이 후에는 인증된 User객체, 권한정보 등을 담아 SecurityContext에 저장되어 전역으로 사용할수 있게 된다.

      => SecurityContextHolder.getContext().getAuthentication()

  - 구조

     1. principal : 아이디 or User 객체

     2. credentials : 비밀번호

     3. authorities : 권한목록

     4. details : 인증 부가 정보
     5. Authenticated : 인증 여부

 

 b.  UsernamePasswordAuthenticationFilter

  -  사용자 Request에서 인증정보를 찾아서 Authentication 객체(Token)를 생성하는 역할을 한다.

      => Authenticated는 false (아직 인증 되어있지않음)

 

 c. AuthenticationToken 

  -  Authentication(interface)을 구현한 실제 인증정보를 나타내는 객체를 의미한다.

  -  사용자 정의로도 구현이 가능하다.

 

d. AuthenticationManger 

  -  인증 처리하는 provider에게 위임하는 역할을 하며 인증 후 provider는 새롭게 Authentication을 구성한다.

 

e. AuthenticationProcessingFilter

  -  Authentication(Token 객체)를 SecurityContext에 저장하는 역할을 하는 필터이다.

 

라. SecurityContext

 a. Authentication 의 보관소

  -  SecurityContextAuthentication 객체가 저장되는 보관소로 TheadLocal에 저장된다.

      => ThreadLocal은 Thread 마다 고유하게 할당된 저장공간 (공유불가, Thread-safe)

  -  인증 이후에 "SPRING_SECURITY_CONTEXT"라는 이름으로 HttpSession에 저장된다.

 

 b. SecurityContextHolder

  -  SecurityContext의 객체 저장 방식을 지정한다.

     1. MODE_THREADLOCAL : 스레드당 SecurityContext (default) 

     2. MODE_INHERITABLETHREADLOCAL : 메인 스레드와 자식 스레드 동일한 SecurityContext 

     3. MODE_GLOBAL : 프로그램내에서 하나의 SecurityContext  사용

 

 c. SecurityContextPresistenceFilter

   -  인증 전에는 SecurityContext를 생성하는 역할을 하며 인증 후에는 Session에서
      SecurityContext를 꺼내 로드하는 역할을 한다. (SecurityContextHolder에 ThreadLocal에 저장)

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기