코드스테이츠_국비교육/[Section4]

63.01-64.01_[Spring Security] Spring Security 흐름_22.11.21-22.11.22

생각없이 해도 생각보다 좋다. 2022. 11. 21. 18:44

>Servlet Filter

Filter

Sevlet 기반 애플리케이션의 DispacherServlet은 가장 최전선에서 Client와 소통을 담당한다.

SevletFilter는 Client와 DispacherSevlet 사이에서 특별한 목적의 처리를 하는 Java의 컴포넌트이다.

Request가 DispacherSevlet로 가기전에 '전'처리를 할 수 있고, Response가 Client로 가기전에 '후'처리를 할 수 있다.

SevletFilter는 목적에 따라 다양한 필터가 존재하고 사용할 수 있다.
Spring Security는 이러한 필터 기능을 이용하여 Request가 DispacherSevlet로 들어오기전 인증(Authentication), 권한 부여(Authorization)와 같은 작업을 수행한다.

 

>Sevlet Filter Chain 내부

Sevlet Filter Chain

Filter의 묶음을 Filter Chain이라고 한다.

Sevlet Filter Chain 내부에 Spring Security Filter 영역이 있다.

 

>Spring Security

Spring Security는 Spring MVC 기반 애플리케이션의 인증(Authentication)과 인가(Authorization or 권한 부여) 기능을 지원하는 보안 프레임워크

 

>Spring Security 흐름

Spring Security Filter 영역

Spring Security 의 전반적인 흐름은 위 도식과 같다.

크리덴셜이란 사용자를 증명하기 위한 구체적인 수단을 의미하고, 보통 password가 크리덴셜에 해당한다.

위 흐름 중에서 `인증 관리자`와 `접근 결정 관리자`가 Spring Security Filter이다.

  • 인증 관리자

1. 로그인 요청을 처리하는 필터(UsernamePasswordAuthenticationFilter)

2. Username(로그인 ID)와 Password를 받고, 이를 바탕으로 아직 인증 상태 정보가 없는 Authentication을 만듬.

3. 내부 로직을 거쳐 인증 상태 정보가 저장된 Authentication을 만듬.

4. SecurityContext에 인증된 Authentication을 저장함.

  • 접근 결정 관리자

1. 리소스 접근 권한을 부여하는 필터(AuthorizationFilter)

2. SecurityContext에서 인증처리된 Autentication을 가져옴.

3. URL 기반으로 요청을 매칭처리하는 로직으로 권한을 부여함.

 

>인증 관리자 세부 흐름; UsernamePasswordAuthenticationFilter

 

>접근 결정(권한) 관리자 세부 흐름; UsernamePasswordAuthenticationFilter